全局热键
时间:2010-10-14 来源:江湖一键客
点击下载演示工程
函数原型:function RegisterHotKey(hWnd: HWND; id: Integer; fsModifiers, vk: UINT): BOOL; stdcall;
函数功能:该函数定义一个系统范围的热键。
参数:
hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL, 传递给调用线程的WM_HOTKEY消息必须在消 息循环中中进行处理。
id:定义热键的标识符。调用线程中的其他热键不能使用同样的标识符。应用功能程序必须定义一个0X0000-0xBFFF范 围的值。一个共享的动态链接库(DLL)必须定义一个0xC000-0xFFFF范围的值伯GlobalAddAtom函数返回该范围)。为了避免与其他动态链接库定义的热键冲突,一个DLL必须使用GlobalAddAtom函数获得热键的标识符。
fsModifoers:定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的键。该参数可以是如下值的组合:
MOD_ALT:按下的可以是任一Alt键。
MOD_CONTROL:按下的可以是任一Ctrl键。
MOD_SHIFT:按下的可以是任一Shift键。
MOD_WIN:按下的可以是任一Windows按键。这些键可以用Microsoft Windows日志记录下来。
MOD_NOREPEAT:Windows 7或者后续版本: 更改热键行为,以便键盘自动重复不会产生多个热键通知。
vk:定义热键的虚拟键码。
返回值:若函数调用成功,返回True,若函数调用失败,则返回False。

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } procedure WndProc(var TheMessage:TMessage);override; procedure MyUnRegisterHotKey(); end; var Form1: TForm1; KEY_ALT_C_Atom:TAtom; KEY_SHIFT_D_Atom:TAtom; KEY_CTRL_A_Atom:TAtom; const KEY_ALT_C_AtomString:String='35AC2821-CFDF-4F06-A3FE-42274ED1E71A'; KEY_SHIFT_D_AtomString:String='203AC0A8-FB66-4BFB-B17C-0FD215C250F1'; KEY_CTRL_A_AtomString:String='062B72D0-178C-4887-B84C-E7030EA55EB7'; procedure About(); implementation {$R *.dfm} procedure About();begin ShowMessage('程序名称:全局热键'+#13+ '版本:1.0.0.0'+#13+ '日期:2010-10-9'+#13+ '作者:江湖一键客'+#13+ '业务联系QQ:82530662'); end; procedure TForm1.WndProc(var TheMessage:TMessage); begin if TheMessage.Msg=WM_HOTKEY then begin if (TheMessage.LParamLo=MOD_ALT) and (TheMessage.LParamHi=ord('C')) then begin ShowMessage('测试 Alt+C'); end else if(TheMessage.LParamLo=MOD_SHIFT) and (TheMessage.LParamHi=ord('D')) then begin MyUnRegisterHotKey; ShowMessage('注销热键 SHIFT+D'); end else if(TheMessage.LParamLo=MOD_CONTROL) and (TheMessage.LParamHi=ord('A')) then begin About; end; end else begin inherited; end; end; procedure TForm1.FormCreate(Sender: TObject); begin KEY_ALT_C_Atom:=GlobalAddAtom(PChar(KEY_ALT_C_AtomString)); KEY_SHIFT_D_Atom:=GlobalAddAtom(PChar(KEY_SHIFT_D_AtomString)); KEY_CTRL_A_Atom:=GlobalAddAtom(PChar(KEY_ALT_C_Atom)); RegisterHotKey(Form1.Handle, KEY_ALT_C_Atom,MOD_ALT,ord('C')); RegisterHotKey(Self.Handle,KEY_CTRL_A_Atom,MOD_CONTROL,ord('A')); RegisterHotKey(Self.Handle,KEY_SHIFT_D_Atom,MOD_SHIFT,ord('D')); end; procedure TForm1.MyUnRegisterHotKey(); begin UnRegisterHotKey(Self.Handle,KEY_ALT_C_Atom); UnRegisterHotkey(self.Handle,KEY_SHIFT_D_Atom); UnRegisterHotKey(Self.Handle,KEY_CTRL_A_Atom); GlobalDeleteAtom(KEY_ALT_C_Atom); GlobalDeleteAtom(KEY_SHIFT_D_Atom); GlobalDeleteAtom(KEY_SHIFT_D_Atom); end; procedure TForm1.FormDestroy(Sender: TObject); begin MyUnRegisterHotKey; end; end.