注册热键后,不论程序是否在前台,都能接收到 WM_HOTKEY 消息。
注:注册的热键在修改窗口的 BorderStyle 属性后导致失效,将顺序颠倒问题解决。
MyHotKeyID : integer; |
MyHotKeyID := GlobalAddAtom('SoundHotKey')-$C000; |
function RegisterHotKey(handle, MyHotKeyID, Mod, vk):boolean; |
function UnRegisterHotKey(handle, MyHotKeyID):boolean; |
参数 | 意义 |
---|---|
handle | 接收消息的窗体 |
MyHotKeyID | 热键 ID |
Mod | 功能键:
MOD_SHIFT, MOD_ALT, MOD_CONTROL, MOD_WIN |
vk | 按键:
VK_F1, VK_F2 |
GlobalAddAtom | 生成 $C000-$FFFF 的 ID(DLL 用),应用程序只能用 $0000-$BFFF |
RegisterHotKey | 注册热键,返回值表示是否成功 |
UnRegisterHotKey | 注销热键 |
procedure user_hotkey(var msg:TMessage); message WM_HOTKEY; |
msg 属性 | 意义 |
---|---|
Msg | WM_HOTKEY |
WParam | 热键 ID IDHOT_SNAPDESKTOP IDHOT_SNAPWINDOW |
LParamLo | 功能键 |
LParamHi | 按键 |
// 定义热键 ID 及热键注册是否成功的变量 Var MyHotKeyID : integer; MyHotKeyOK : boolean; |
// 在窗口构造函数中注册热键 procedure TForm1.FormCreate(Sender: TObject); begin MyHotKeyID := GlobalAddAtom('HotKeyNameString')-$C000; MyHotKeyOK := RegisterHotKey(handle, MyHotKeyID, MOD_ALT, VK_F8); end; |
// 在窗口销毁时注销热键 procedure TForm1.FormDestroy(Sender: TObject); begin if MyHotKeyOK then UnRegisterHotKey(handle,MyHotKeyID); end; |
// 热键消息的处理过程 procedure TForm1.proc_hotkey(var msg:TMessage); message WM_HOTKEY; begin if msg.WParam = MyHotKeyID then begin // 按热键 ALT-F8 后执行的操作 end; end; |