Symbolic constant name |
Value (hexadecimal) |
Keyboard (or mouse) equivalent |
VK_LBUTTON |
01 |
Left mouse button |
VK_RBUTTON |
02 |
Right mouse button |
VK_CANCEL |
03 |
Control-break processing |
VK_MBUTTON |
04 |
Middle mouse button (three-button mouse) |
VK_BACK |
08 |
BACKSPACE key |
VK_TAB |
09 |
TAB key |
VK_CLEAR |
0C |
CLEAR key |
VK_RETURN |
0D |
ENTER key |
VK_SHIFT |
10 |
SHIFT key |
VK_CONTROL |
11 |
CTRL key |
VK_MENU |
12 |
ALT key |
VK_PAUSE |
13 |
PAUSE key |
VK_CAPITAL |
14 |
CAPS LOCK key |
VK_ESCAPE |
1B |
ESC key |
VK_SPACE |
20 |
SPACEBAR |
VK_PRIOR |
21 |
PAGE UP key |
VK_NEXT |
22 |
PAGE DOWN key |
VK_END |
23 |
END key |
VK_HOME |
24 |
HOME key |
VK_LEFT |
25 |
LEFT ARROW key |
VK_UP |
26 |
UP ARROW key |
VK_RIGHT |
27 |
RIGHT ARROW key |
VK_DOWN |
28 |
DOWN ARROW key |
VK_SELECT |
29 |
SELECT key |
VK_PRINT |
2A |
PRINT key |
VK_EXECUTE |
2B |
EXECUTE key |
VK_SNAPSHOT |
2C |
PRINT SCREEN key |
VK_INSERT |
2D |
INS key |
VK_DELETE |
2E |
DEL key |
VK_HELP |
2F |
HELP key |
30 |
0 key |
|
31 |
1 key |
|
32 |
2 key |
|
33 |
3 key |
|
34 |
4 key |
|
35 |
5 key |
|
36 |
6 key |
|
37 |
7 key |
|
38 |
8 key |
|
39 |
9 key |
|
41 |
A key |
|
42 |
B key |
|
43 |
C key |
|
44 |
D key |
|
45 |
E key |
|
46 |
F key |
|
47 |
G key |
|
48 |
H key |
|
49 |
I key |
|
4A |
J key |
|
4B |
K key |
|
4C |
L key |
|
4D |
M key |
|
4E |
N key |
|
4F |
O key |
|
50 |
P key |
|
51 |
Q key |
|
52 |
R key |
|
53 |
S key |
|
54 |
T key |
|
55 |
U key |
|
56 |
V key |
|
57 |
W key |
|
58 |
X key |
|
59 |
Y key |
|
5A |
Z key |
|
VK_NUMPAD0 |
60 |
Numeric keypad 0 key |
VK_NUMPAD1 |
61 |
Numeric keypad 1 key |
VK_NUMPAD2 |
62 |
Numeric keypad 2 key |
VK_NUMPAD3 |
63 |
Numeric keypad 3 key |
VK_NUMPAD4 |
64 |
Numeric keypad 4 key |
VK_NUMPAD5 |
65 |
Numeric keypad 5 key |
VK_NUMPAD6 |
66 |
Numeric keypad 6 key |
VK_NUMPAD7 |
67 |
Numeric keypad 7 key |
VK_NUMPAD8 |
68 |
Numeric keypad 8 key |
VK_NUMPAD9 |
69 |
Numeric keypad 9 key |
VK_SEPARATOR |
6C |
Separator key |
VK_SUBTRACT |
6D |
Subtract key |
VK_DECIMAL |
6E |
Decimal key |
VK_DIVIDE |
6F |
Divide key |
VK_F1 |
70 |
F1 key |
VK_F2 |
71 |
F2 key |
VK_F3 |
72 |
F3 key |
VK_F4 |
73 |
F4 key |
VK_F5 |
74 |
F5 key |
VK_F6 |
75 |
F6 key |
VK_F7 |
76 |
F7 key |
VK_F8 |
77 |
F8 key |
VK_F9 |
78 |
F9 key |
VK_F10 |
79 |
F10 key |
VK_F11 |
7A |
F11 key |
VK_F12 |
7B |
F12 key |
VK_F13 |
7C |
F13 key |
VK_F14 |
7D |
F14 key |
VK_F15 |
7E |
F15 key |
VK_F16 |
7F |
F16 key |
VK_F17 |
80H |
F17 key |
VK_F18 |
81H |
F18 key |
VK_F19 |
82H |
F19 key |
VK_F20 |
83H |
F20 key |
VK_F21 |
84H |
F21 key |
VK_F22 |
85H |
F22 key |
VK_F23 |
86H |
F23 key |
VK_F24 |
87H |
F24 key |
VK_NUMLOCK |
90 |
NUM LOCK key |
VK_SCROLL |
91 |
SCROLL LOCK key |
VK_LSHIFT |
A0 |
Left SHIFT key |
VK_RSHIFT |
A1 |
Right SHIFT key |
VK_LCONTROL |
A2 |
Left CONTROL key |
VK_RCONTROL |
A3 |
Right CONTROL key |
VK_LMENU |
A4 |
Left MENU key |
VK_RMENU |
A5 |
Right MENU key |
VK_PLAY |
FA |
Play key |
VK_ZOOM |
FB |
Zoom 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;