RegisterHotKey的具体使用方法

RegisterHotKey的具体使用方法用到 3 个 API 函数 BOOLRegister HWNDhWnd 响应该热键的窗口句柄 Intid 该热键的唯一标识 UINTfsModifi 该热键的辅助按键 UINTvk 该热键的键值 为了得到唯一标识 我们还将用到另一个 API 函数 ATOMGlobalAd LPCTSTRlpStr 自

用到3个API函数

为了得到唯一标识,我们还将用到另一个API函数

ATOM GlobalAddAtom(

LPCTSTR lpString //自己设定的一个字符串

);

因为我们还要在程序退出的时候,消除这个热键, 所以需要声明一个全局变量:

HotKeyId: Integer;

第一步:

在窗口的create事件中,加入以下代码

第二步:

在上面的代码下面加入:

RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8); 

上面 的代码注册了一个热键:ALT+F8。当然如果你希望象TAKEIT那样,只用F8, 就这么写:

RegisterHotKey(Handle, hotkeyid, 0, VK_F8); 

注:handle是一个特殊的变量,它表示当前窗口的句柄。

这个函数你应该能句举一反三了吧。

原理:

第三步:

注册了热键,就该写下响应代码了。

procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;

然后在程序中加入如下代码:

procedure Tfmain.HotKeyDown(var Msg: Tmessage); begin if (Msg.LparamLo = MOD_ALT) AND Msg.LParamHi = VK_F8 then // 假设热键为ALT+F8 begin end; end; 

最后一步:

在窗口的close事件中加入

一个实际的例子!


type

TForm1


=

class
(TForm)

procedure
FormCreate(Sender: TObject);

procedure
FormDestroy(Sender: TObject);

protected


procedure
hotykey(
var
msg:TMessage);
message
WM_HOTKEY;

end
;




var

Form1: TForm1;
id,id2:Integer;








implementation




{

$R *.DFM
}






procedure
TForm1.hotykey(
var
msg:TMessage);

begin


if
(msg.LParamLo
=
MOD_CONTROL)
and
(msg.LParamHi
=
81
)
then


begin

ShowMessage(



Ctrl + Q

);

end
;




if
(msg.LParamLo
=
MOD_CONTROL)
and
(msg.LParamHi
=
82
)
then


begin

ShowMessage(



Ctrl + R

);

end
;

end
;






procedure
TForm1.FormCreate(Sender: TObject);

begin

id:


=
GlobalAddAtom(

hotkey

);
ReGISterHotKey(handle,id,


mod
_control,
81
);

id2:





=
GlobalAddAtom(

hotkey2

);
RegisterHotKey(handle,id2,


mod
_control,
82
);

end
;




procedure
TForm1.FormDestroy(Sender: TObject);

begin

UnRegisterHotKey(handle,id);
UnRegisterHotKey(handle,id2);






end
;

附虚键码:

 

ContractedBlock.gif ExpandedBlockStart.gif 代码


Virtual Key Code Corresponding key

VK_LBUTTON





Left
mouse button
VK_RBUTTON


Right
mouse button
VK_CANCEL Control


+
Break
VK_MBUTTON Middle mouse button
VK_BACK Backspace key
VK_TAB Tab key
VK_CLEAR Clear key
VK_RETURN Enter key
VK_SHIFT Shift key
VK_CONTROL Ctrl key
VK_MENU Alt key
VK_PAUSE Pause key
VK_CAPITAL Caps Lock key
VK_KANA Used























with
IME
VK_HANGUL Used


with
IME
VK_JUNJA Used


with
IME
VK_FINAL Used


with
IME
VK_HANJA Used


with
IME
VK_KANJI Used


with
IME
VK_CONVERT Used


with
IME

VK_NONCONVERT Used





with
IME
VK_ACCEPT Used


with
IME
VK_MODECHANGE Used


with
IME
VK_ESCAPE Esc key
VK_SPACE





Space
bar
VK_PRIOR Page Up key
VK_NEXT Page Down key
VK_END







End
key
VK_HOME Home key
VK_LEFT





Left
Arrow key
VK_UP Up Arrow key
VK_RIGHT





Right
Arrow key
VK_DOWN Down Arrow key
VK_SELECT





Select
key
VK_PRINT Print key (keyboard



specific)
VK_EXECUTE


Execute
key
VK_SNAPSHOT Print Screen key
VK_INSERT Insert key
VK_DELETE Delete key
VK_HELP Help key

VK_LWIN













Left
Windows key (Microsoft keyboard)
VK_RWIN


Right
Windows key (Microsoft keyboard)
VK_APPS Applications key (Microsoft keyboard)
VK_NUMPAD0





0
key (numeric keypad)
VK_NUMPAD1


1
key (numeric keypad)
VK_NUMPAD2


2
key (numeric keypad)
VK_NUMPAD3


3
key (numeric keypad)
VK_NUMPAD4


4
key (numeric keypad)
VK_NUMPAD5


5
key (numeric keypad)
VK_NUMPAD6


6
key (numeric keypad)
VK_NUMPAD7


7
key (numeric keypad)
VK_NUMPAD8


8
key (numeric keypad)
VK_NUMPAD9


9
key (numeric keypad)

VK_MULTIPLY Multiply key (numeric keypad)
VK_ADD Add key (numeric keypad)
VK_SEPARATOR Separator key (numeric keypad)
VK_SUBTRACT Subtract key (numeric keypad)
VK_DECIMAL Decimal key (numeric keypad)
VK_DIVIDE Divide key (numeric keypad)
VK_F1 F1 key
VK_F2 F2 key
VK_F3 F3 key
VK_F4 F4 key
VK_F5 F5 key
VK_F6 F6 key
VK_F7 F7 key
VK_F8 F8 key
VK_F9 F9 key
VK_F10 F10 key
VK_F11 F11 key
VK_F12 F12 key
VK_F13 F13 key
VK_F14 F14 key
VK_F15 F15 key

VK_F16 F16 key
VK_F17 F17 key
VK_F18 F18 key
VK_F19 F19 key
VK_F20 F20 key
VK_F21 F21 key
VK_F22 F22 key
VK_F23 F23 key
VK_F24 F24 key
VK_NUMLOCK Num Lock key
VK_SCROLL Scroll Lock key
VK_LSHIFT







































































Left
Shift key (only used
with
GetAsyncKeyState
and
GetKeyState)
VK_RSHIFT


Right
Shift key (only used
with
GetAsyncKeyState
and
GetKeyState)
VK_LCONTROL


Left
Ctrl key (only used
with
GetAsyncKeyState
and
GetKeyState)
VK_RCONTROL


Right
Ctrl key (only used
with
GetAsyncKeyState
and
GetKeyState)

VK_LMENU





Left
Alt key (only used
with
GetAsyncKeyState
and
GetKeyState)
VK_RMENU


Right
Alt key (only used
with
GetAsyncKeyState
and
GetKeyState)
VK_PROCESSKEY Process key
VK_ATTN Attn key
VK_CRSEL CrSel key
VK_EXSEL ExSel key
VK_EREOF











Erase
EOF key
VK_PLAY Play key
VK_ZOOM Zoom key
VK_NONAME Reserved







for
future use
VK_PA1 PA1 key
VK_OEM_CLEAR Clear key





 

转载于:https://www.cnblogs.com/rogee/archive/2010/09/17/1829573.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227892.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午8:17
下一篇 2026年3月16日 下午8:17


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号