Delphi RegisterHotKey 设置系统热键

本文介绍了如何在Delphi中注册和处理系统热键。通过GlobalAddAtom和RegisterHotKey函数设置MOD_CONTROL + F1和MOD_CONTROL + F2为热键,当按下这些组合键时,程序会接收到WM_HOTKEY消息。在HotKeyDown函数中根据WM_HOTKEY消息的参数判断并响应相应的热键操作。同时,文章提到UnRegisterHotKey用于释放已注册的热键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先先贴一张热键表
Symbolic
constant name
Value
(hexadecimal)
Keyboard (or mouse) equivalent
VK_LBUTTON01Left mouse button
VK_RBUTTON02Right mouse button
VK_CANCEL03Control-break processing
VK_MBUTTON04Middle mouse button (three-button mouse)
VK_BACK08BACKSPACE key
VK_TAB09TAB key
VK_CLEAR0CCLEAR key
VK_RETURN0DENTER key
VK_SHIFT10SHIFT key
VK_CONTROL11CTRL key
VK_MENU12ALT key
VK_PAUSE13PAUSE key
VK_CAPITAL14CAPS LOCK key
VK_ESCAPE1BESC key
VK_SPACE20SPACEBAR
VK_PRIOR21PAGE UP key
VK_NEXT22PAGE DOWN key
VK_END23END key
VK_HOME24HOME key
VK_LEFT25LEFT ARROW key
VK_UP26UP ARROW key
VK_RIGHT27RIGHT ARROW key
VK_DOWN28DOWN ARROW key
VK_SELECT29SELECT key
VK_PRINT2APRINT key
VK_EXECUTE2BEXECUTE key
VK_SNAPSHOT2CPRINT SCREEN key
VK_INSERT2DINS key
VK_DELETE2EDEL key
VK_HELP2FHELP key
 300 key
 311 key
 322 key
 333 key
 344 key
 355 key
 366 key
 377 key
 388 key
 399 key
 41A key
 42B key
 43C key
 44D key
 45E key
 46F key
 47G key
 48H key
 49I key
 4AJ key
 4BK key
 4CL key
 4DM key
 4EN key
 4FO key
 50P key
 51Q key
 52R key
 53S key
 54T key
 55U key
 56V key
 57W key
 58X key
 59Y key
 5AZ key
VK_NUMPAD060Numeric keypad 0 key
VK_NUMPAD161Numeric keypad 1 key
VK_NUMPAD262Numeric keypad 2 key
VK_NUMPAD363Numeric keypad 3 key
VK_NUMPAD464Numeric keypad 4 key
VK_NUMPAD565Numeric keypad 5 key
VK_NUMPAD666Numeric keypad 6 key
VK_NUMPAD767Numeric keypad 7 key
VK_NUMPAD868Numeric keypad 8 key
VK_NUMPAD969Numeric keypad 9 key
VK_SEPARATOR6CSeparator key
VK_SUBTRACT6DSubtract key
VK_DECIMAL6EDecimal key
VK_DIVIDE6FDivide key
VK_F170F1 key
VK_F271F2 key
VK_F372F3 key
VK_F473F4 key
VK_F574F5 key
VK_F675F6 key
VK_F776F7 key
VK_F877F8 key
VK_F978F9 key
VK_F1079F10 key
VK_F117AF11 key
VK_F127BF12 key
VK_F137CF13 key
VK_F147DF14 key
VK_F157EF15 key
VK_F167FF16 key
VK_F1780HF17 key
VK_F1881HF18 key
VK_F1982HF19 key
VK_F2083HF20 key
VK_F2184HF21 key
VK_F2285HF22 key
VK_F2386HF23 key
VK_F2487HF24 key
VK_NUMLOCK90NUM LOCK key
VK_SCROLL91SCROLL LOCK key
VK_LSHIFTA0Left SHIFT key
VK_RSHIFTA1Right SHIFT key
VK_LCONTROLA2Left CONTROL key
VK_RCONTROLA3Right CONTROL key
VK_LMENUA4Left MENU key
VK_RMENUA5Right MENU key
VK_PLAYFAPlay key
VK_ZOOMFBZoom key

//定义全局变量
var 
  QuitId, ShowMe: Integer;

  //热键响应函数
  procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;

  //注册热键
  QuitId := GlobalAddAtom('MyQuitId') - $C000;
  RegisterHotKey(Handle, QuitId, MOD_CONTROL, VK_F2);
 //注册热键
  ShowMe := GlobalAddAtom('MyShowMe') - $C000;
  RegisterHotKey(Handle, ShowMe, MOD_CONTROL, VK_F1);
  注:HotKeyId的合法取之范围是0x0000到0xBFFF之间,GlobalAddAtom函数得到的值在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。
  热键的辅助按键包括Mod_Ctrl、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows键,即其键面上有Windows标志的那个键,其值为Mod_win。
  注:handle是一个特殊的变量,它表示当前窗口的句柄。
  这个函数你应该能句举一反三了吧。
  原理:
  一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消息的格式为:
  idHotKey=(int)wParam;//该参数在设置系统级的热键有用,一般不予使用
  fuModifiers=(UINT)LOWORD(lParam);//热键的辅助按键
  uVirtKey=(UINT)HIWORD(lParam);//热键的键值

  //释放热键
  UnRegisterHotKey(handle, QuitId);
  UnRegisterHotKey(handle, ShowMe);

  procedure TfrmMain.HotKeyDown(var Msg: Tmessage);
  begin
    if (Msg.LparamLo = MOD_CONTROL) AND (Msg.LParamHi = VK_F2) then //退出
    begin
      Close;
    end;
    if (Msg.LparamLo = MOD_CONTROL) AND (Msg.LParamHi = VK_F1) then
    begin
      Close;
    end;
  end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值