吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1078|回复: 7
收起左侧

[求助] 怎么保存到INI,再次读取。。。再热键触发。。。

[复制链接]
冥界3大法王 发表于 2022-6-28 18:12
[Delphi] 纯文本查看 复制代码

unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus,
  Vcl.ComCtrls;

type
  TForm4 = class(TForm)
    HotKey1: THotKey;
    function ShiftStateToWord(Shift: TShiftState): Word;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure HotKey1Change(Sender: TObject); //热键组合键分解
  private
    { Private declarations }
    var
      aatom: ATOM;
      Key, Shift: Word;
  public
     { Public declarations }
    procedure hotkey(var msg: TMessage); message WM_HOTKEY;//定义全局热键消息事件
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

function TForm4.ShiftStateToWord(Shift: TShiftState): Word;
begin
  if ssShift in Shift then
    Result := MOD_SHIFT;
  if ssCtrl in Shift then
    Result := Result or MOD_CONTROL;
  if ssAlt in Shift then
    Result := Result or MOD_ALT;
end;

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  UnregisterHotKey(Handle, aatom);
  GlobalDeleteAtom(aatom);
end;

procedure TForm4.hotkey(var msg: TMessage);
begin
  if (msg.LparamLo = Shift) and (msg.LParamHi = Key) then
  begin
    ShowMessage('调用成功!');
  end;
end;

procedure TForm4.HotKey1Change(Sender: TObject);
var
  T: TShiftState;
begin
  if FindAtom('ZWXhotKey') = 0 then
  begin
    aatom := GlobalAddAtom('ZWXhotKey');
  end;
  ShortCutToKey(HotKey1.HotKey, Key, T);
  Shift := ShiftStateToWord(T);

  try
    if RegisterHotKey(Handle, aatom - $C000, Shift, Key) then
    begin
      ShowMessage('注册成功');
    end;
  except
    on e: Exception do
      ShowMessage(e.Message);
  end;

end;

end.

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 冥界3大法王 发表于 2022-6-28 18:17
问题2:
貌似只有 Ctrl+Shift+X 才起作用
我想让ctrl shift  alt window 全起作用
 楼主| 冥界3大法王 发表于 2022-6-28 18:29
风铃夜思雨 发表于 2022-6-29 00:48
本帖最后由 风铃夜思雨 于 2022-6-29 00:55 编辑

uses menus, inifiles;

Type
  TFrmMain = Class(TForm)
    Procedure CmdSetClick(Sender: TObject);
  Private
    HotKeyID: Integer;
    Procedure SetKey();
    Procedure HotKeyDown(Var Msg: TWMHotKey); Message WM_HOTKEY; //热键消息
  Public
  End;

Procedure TFrmMain.HotKeyDown(Var Msg: TWMHotKey);
Begin
  If (Msg.HotKey = HotKeyID) Then
  begin
   ..................................省略
  end;
End;
Procedure TFrmMain.SetKey();
Var Sc: TShortCut;
  Modifiers, vk: Word;
  Shift: TShiftState;
  Str: String;
Begin
  {注册热键}
  HotKeyID := GlobalAddAtom('HotKeyID') - $C000;
  With TIniFile.Create(Path + 'Config.ini') Do
  Begin
    Modifiers := 0;
    vk := 0;
    Str := ReadString('Config', 'CustomKey', 'Ctrl+F11');
    If Str = '' Then Str := 'Ctrl+F11';
    Sc := TextToShortCut(Str);
    ShortCutToKey(Sc, vk, Shift);
    If ssShift In Shift Then Modifiers := Modifiers Or MOD_SHIFT;
    If ssCtrl In Shift Then Modifiers := Modifiers Or MOD_CONTROL;
    If ssAlt In Shift Then Modifiers := Modifiers Or MOD_ALT;
    Free;
  End;
  UnregisterHotKey(Handle, HotKeyID);
  RegisterHotKey(Handle, HotKeyID, Modifiers, vk);
End;


Procedure TFrmMain.FormCreate(Sender: TObject);
Begin
  SetKey; //注册热键
end;

Procedure TFrmMain.FormDestroy(Sender: TObject);
Begin
  UnregisterHotKey(Handle, HotKeyID);
  DeleteAtom(HotKeyID);
End;
Procedure TFrmMain.CmdSetClick(Sender: TObject);
Var F: TFrmSet;
  Ini: TIniFile;
  BB: Boolean;
Begin
  F := TFrmSet.Create(self);
  Ini := TIniFile.Create(Path + 'Config.ini');
  Try
    With F Do
    Begin
   //读到INI热键参数到 hotkey 控件中
      HotKey.Hint := Ini.ReadString('Config', 'CustomKey', 'Ctrl+F11');
      If HotKey.Hint = '' Then HotKey.Hint := 'Ctrl+F11';
      HotKey.HotKey := TextToShortCut(HotKey.Hint);
      HotKey.Hint := '';
      If ShowModal = mrok Then
      Begin
        Ini.WriteString('Config', 'CustomKey', ShortCutToText(HotKey.HotKey)); //写入新的热键设置
        SetKey; //生效新的热键
      End;
    End;
  Finally
    Ini.Free;
    F.Free;
  End;
End;

免费评分

参与人数 1吾爱币 +4 热心值 +1 收起 理由
冥界3大法王 + 4 + 1 谢谢@Thanks!

查看全部评分

andyfky 发表于 2022-6-29 08:37
学习了,谢谢。
 楼主| 冥界3大法王 发表于 2022-7-1 09:34

@风铃夜思雨
F: TFrmSet;  这句不知在哪个uses 模块中?
风铃夜思雨 发表于 2022-7-2 00:06
冥界3大法王 发表于 2022-7-1 09:34
@风铃夜思雨
F: TFrmSet;  这句不知在哪个uses 模块中?

软件的设置窗口,  新建窗口, 命名 FrmSet,   丢一个HotKey控件(DELPHI自带的), 一个确定按键 命名 CmdSet

免费评分

参与人数 1热心值 +1 收起 理由
冥界3大法王 + 1 晕,原来是这么来的。。。

查看全部评分

 楼主| 冥界3大法王 发表于 2022-7-2 09:50
风铃夜思雨 发表于 2022-7-2 00:06
软件的设置窗口,  新建窗口, 命名 FrmSet,   丢一个HotKey控件(DELPHI自带的), 一个确定按键 命名  ...

晕,原来是这么来的。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 09:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表