RegisterHotKey的具体使用方法

用到3个API函数

BOOL RegisterHotKey(
HWND hWnd,  //响应该热键的窗口句柄
Int id,      //该热键的唯一标识
UINT fsModifiers, //该热键的辅助按键
UINT vk    //该热键的键值
);

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

ATOM GlobalAddAtom(

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

);

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

HotKeyId: Integer;

第一步:

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

HotKeyId := GlobalAddAtom(‘MyHotKey’) - $C000;
注: HotKeyId的合法取之范围是0x0000到0xBFFF之间, GlobalAddAtom函数得到的值
在0xC000到0xFFFF之间,所以减掉0xC000来满足调用要求。

第二步:

在上面的代码下面加入:

RegisterHotKey(Handle, hotkeyid, MOD_ALT, VK_F8); 

热键的辅助按键包括Mod_Ctrl 、Mod_Alt、Mod_Shift,对于Windows兼容键盘还支持Windows
键,即其键面上有Windows标志的那个键,其值为Mod_win。

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

RegisterHotKey(Handle, hotkeyid, 0, VK_F8); 

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

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

原理:

一旦热键设置成功,在程序应用过程中如果有相应的键被按下,Windows系统都会给你的应
用程序发送一个消息WM_HOTKEY,不管你的应用程序是否为当前活动的。其中WM_HOTKEY消
息的格式为: 

idHotKey = (int) wParam; // 该参数在设置系统级的热键有用,一般不予使用
fuModifiers = (UINT) LOWORD(lParam); //热键的辅助按键
uVirtKey = (UINT) HIWORD(lParam); //热键的键值

第三步:

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

首先,在程序头部分的private段中加入声明 (作用是声明这个过程,和声明变量类似。
关于如何声明函数、过程,请请参考各自的帮助文件或其它资料):

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事件中加入

UnRegisterHotKey(handle, HotKeyId); //注销HotKey, 释放资源。
-----------------------------------------------------------------------------------------------

一个实际的例子!

 
  
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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[5\]: PERL GlobalHotkey是一个Perl模块,用于在Windows操作系统上注册和处理全局热键。它允许你在Perl脚本中定义全局热键,并在按下这些热键时执行相应的操作。要使用PERL GlobalHotkey,你需要先安装Win32::API模块,然后在Perl脚本中引入该模块并使用其提供的函数来注册和处理全局热键。 下面是一个简单的示例代码,展示了如何在Perl脚本中使用PERL GlobalHotkey: ```perl use Win32::API; # 定义全局热键的回调函数 my $hotkey_callback = sub { # 在这里执行你想要的操作 print "Global hotkey pressed!\n"; }; # 注册全局热键 my $register_hotkey = Win32::API->new('user32', 'RegisterHotKey', \['N', 'N', 'N', 'N'\], 'N'); $register_hotkey->Call(0, 1, 0x0002, 0x42); # 注册Ctrl + B作为全局热键 # 消息循环,等待热键被按下 while (1) { my $msg; Win32::API::MessageLoop(); } # 注销全局热键 my $unregister_hotkey = Win32::API->new('user32', 'UnregisterHotKey', \['N', 'N'\], 'N'); $unregister_hotkey->Call(0, 1); # 注销Ctrl + B作为全局热键 ``` 在上面的示例代码中,我们首先定义了一个回调函数`$hotkey_callback`,当全局热键被按下时,该函数会被调用。然后,我们使用`Win32::API`模块的`RegisterHotKey`函数注册了一个全局热键Ctrl + B,并指定了回调函数。接下来,我们使用一个消息循环来等待热键被按下,直到程序退出。最后,我们使用`UnregisterHotKey`函数注销了全局热键。 请注意,PERL GlobalHotkey只能在Windows操作系统上使用,并且需要安装Win32::API模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值