unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
HotKeyId: array[0..12] of Integer; //热键数组, 这里准备定义 13 个热键
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
//注册热键
for i := Low(HotKeyId) to High(HotKeyId) do
HotKeyId[i] := GlobalAddAtom(PChar(IntToStr(i))); //热键命名可随意
RegisterHotKey(Handle,HotKeyId[0],0,VK_F2); //F2
RegisterHotKey(Handle,HotKeyId[1],0,VK_UP); //Up
RegisterHotKey(Handle,HotKeyId[2],0,VK_DOWN); //Down
RegisterHotKey(Handle,HotKeyId[3],0,VK_LEFT); //Left
RegisterHotKey(Handle,HotKeyId[4],0,VK_RIGHT); //Right
RegisterHotKey(Handle,HotKeyId[5],0,VK_PRIOR); //PageUp
RegisterHotKey(Handle,HotKeyId[6],0,VK_NEXT); //PageDown
RegisterHotKey(Handle,HotKeyId[7],0,VK_OEM_PLUS); //+
RegisterHotKey(Handle,HotKeyId[8],0,VK_OEM_MINUS); //-
RegisterHotKey(Handle,HotKeyId[9],0,$31); //1
RegisterHotKey(Handle,HotKeyId[10],0,$41); //a
RegisterHotKey(Handle,HotKeyId[11],0,VK_RETURN); //Enter
RegisterHotKey(Handle,HotKeyId[12],MOD_CONTROL,VK_RETURN); //Ctrl+Enter
end;
//热键
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
if Msg.HotKey = HotKeyId[0] then ShowMessage('F2');
if (Msg.HotKey=HotKeyId[1]) then ShowMessage('Up');
if (Msg.HotKey=HotKeyId[2]) then ShowMessage('Down');
if (Msg.HotKey=HotKeyId[3]) then ShowMessage('Left');
if (Msg.HotKey=HotKeyId[4]) then ShowMessage('Right');
if Msg.HotKey = HotKeyId[5] then ShowMessage('PageUp');
if Msg.HotKey = HotKeyId[6] then ShowMessage('PageDown');
if Msg.HotKey = HotKeyId[7] then ShowMessage('+');
if Msg.HotKey = HotKeyId[8] then ShowMessage('-');
if Msg.HotKey = HotKeyId[9] then ShowMessage('1');
if Msg.HotKey = HotKeyId[10] then ShowMessage('a');
if Msg.HotKey = HotKeyId[11] then ShowMessage('Enter');
if Msg.HotKey = HotKeyId[12] then ShowMessage('Ctrl+Enter');
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
i: Integer;
begin
//注销热键
for i := Low(HotKeyId) to High(HotKeyId) do
begin
UnRegisterHotKey(handle,HotKeyId[i]);
GlobalDeleteAtom(HotKeyId[i]);
end;
end;
end.
***************************************************
这里是一些常用按键的键值
***************************************************
RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8);
热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows
键,即其键面上有Windows标志的那个键,其值为Mod_win。
部分热键:
MOD_ALT Alt 键
MOD_CONTROL Ctrl 键
MOD_SHIFT Shift 键
Back 008 Enter 013
Shift 016 Ctrl 017
Alt 018 Pause 019
Caps Lock 020 Esc 027
空格键 032 Page Up 033
Page Down 034 End 035
Home 036 方向左 037
方向上 038 方向右 039
方向下 040 Insert 045
Delete 046 0 - 9 048 - 57
A - Z 065 - 090 数字键盘0-9 096 - 105
数字键盘* 106 数字键盘+ 107
数字键盘- 109 数字键盘. 110
数字键盘/ 111 F1 - F12 112 - 123
Num Lock 144 Soroll Lock 145
; 186 = 187
, 188 - 189
. 190 / 191
~ 192 [ 219
\ 220 ] 221
' 222
上面 的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8, 就这么写:
RegisterHotKey(Handle, hotkeyid, 0, VK_F8);