全局热键在Delphi中的应用实例
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private id: array [1..10] of Integer; idstring:array [1..10] of string; procedure WMHotKey(var msg : Tmessage); message WM_HOTKEY;{响应全局热键按键消息的过程} { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i:byte; begin for i:=1 to 10 do begin UnRegisterHotKey(handle,id[i]);// 释放你应用程序定义的热键 GlobalDeleteAtom(id[i]);// 从原子表删除你定义的热键的原子标识号 end; end; procedure TForm1.FormCreate(Sender: TObject); var i:byte; begin for i:=1 to 10 do begin idstring[i]:=inttostr(i); id[i]:=GlobalAddAtom(pchar('MyHotkey'+idstring[i]))-$C000; {因为GlobalAddAtom 函数返回的值在0xC000-0xFFFF范围之间,减去$C000是为了取值范围的唯一性 } RegisterHotKey(handle,id[i],MOD_CONTROL ,111+i); //112为F1 、113为F2…、121为F10 end; end; procedure TForm1.WMHotKey (var Msg : Tmessage); begin {Ctrl+F1键被按下} if (msg.LParamHi=112 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1;//该消息已经被处理 application.BringToFront ; label1.Caption := 'Ctrl+F1'; end; {Ctrl+F2键被按下} if (msg.LParamHi=113 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F2'; end; {Ctrl+F3键被按下} if (msg.LParamHi=114 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F3'; end; {Ctrl+F4键被按下} if (msg.LParamHi=115 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F4'; end; {Ctrl+F5键被按下} if (msg.LParamHi=116 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F5'; end; {Ctrl+F6键被按下} if (msg.LParamHi=117 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F6'; end; {Ctrl+F7键被按下} if (msg.LParamHi=118 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F7'; end; {Ctrl+F8键被按下} if (msg.LParamHi=119 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F8'; end; {Ctrl+F9键被按下} if (msg.LParamHi=120 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F9'; end; {Ctrl+F10键被按下} if (msg.LParamHi=121 ) and (msg.lparamlo=MOD_CONTROL ) then begin msg.Result:=1; application.BringToFront ; label1.Caption := 'Ctrl+F10'; end; end; end.