注册全局热键和使用

发布时间 2023-06-05 10:24:17作者: lucken

1、在程序创建的时候或者窗体显示的时候注册热键

begin
// 原子【mHotKey01】
mHotKey01 := GlobalAddAtom('xiaoyin_HotKey_CTRL_F1') - $C000;
//注册热键【Ctrl + F1】
RegisterHotKey(Handle, mHotKey01, MOD_CONTROL, VK_F1);
// 原子【mHotKey02】
mHotKey02 := GlobalAddAtom('xiaoyin_HotKey_SHIFT_CTRL_F1') - $C000;
//注册热键【Ctrl + Shift + F1】
RegisterHotKey(Handle, mHotKey02, MOD_CONTROL + MOD_SHIFT, VK_F1);
// 如有更多需求,以此类推即可
end;
————————————————
2、上面注册成功后,此时的热键已经生效,下面就是给相应的热键添加事件

注意:需要声明方法【不管是public还是private还是别的下面都行】
我下面是写在 private 下的

private
{ Private declarations }
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;

// 注册的热键系统收到触发的消息就会程序,然后执行这个方法
procedure TForm1.HotKeyDown(var Msg: Tmessage);
begin
// 如果 热键值对上了
if (Msg.LparamLo = MOD_CONTROL) and (Msg.LParamHi = VK_F1) then
begin
ShowMessage('Ctrl + F1 调用成功');
end;

if (Msg.LparamLo = MOD_CONTROL + MOD_SHIFT) and (Msg.LParamHi = VK_F1) then
begin
ShowMessage('Ctrl + Shift + F1 调用成功');
end;
end;

3、用完之后一定记得需要删除热键,不管是在窗体关闭的情况下,还是在销毁的情况下使用都可以

begin
// 释放热键【Ctrl + F1】
UnRegisterHotKey(handle, mHotKey01);
// 删除原子【mHotKey01】
GlobalDeleteAtom(mHotKey01);
// 释放热键【Ctrl + Shift + F1】
UnRegisterHotKey(handle, mHotKey02);
// 删除原子【mHotKey02】
GlobalDeleteAtom(mHotKey02);
end;