RegisterHotKey 函数 (winuser.h)
定义系统范围的热键。
语法
BOOL RegisterHotKey(
[in, optional] HWND hWnd,
[in] int id,
[in] UINT fsModifiers,
[in] UINT vk
);
参数
[in, optional] hWnd
类型:HWND
将接收热键生成的 WM_HOTKEY 消息的窗口句柄。 如果此参数 NULL,WM_HOTKEY 消息将发布到调用线程的消息队列,并且必须在消息循环中进行处理。
[in] id
类型:int
热键的标识符。 如果 hWnd 参数为 NULL,则热键与当前线程(而不是特定窗口)相关联。 如果热键已存在具有相同的 hWnd 和 id 参数,请参阅“备注”以获取所执行的操作。
[in] fsModifiers
类型:UINT
必须与 vk 参数指定的键结合使用才能生成 WM_HOTKEY 消息, fsModifiers 参数可以是以下值的组合。
值 | 含义 |
---|---|
MOD_ALT 0x0001 |
必须按住任一 ALT 键。 |
MOD_CONTROL 0x0002 |
必须按住 Ctrl 键。 |
MOD_NOREPEAT 0x4000 |
更改热键行为,使键盘自动重复不会生成多个热键通知。 Windows Vista:不支持 此标志。 |
MOD_SHIFT 0x0004 |
必须按住 Shift 键。 |
MOD_WIN 0x0008 |
必须按住任一 WINDOWS 密钥。 这些键标有 Windows 徽标。 涉及 WINDOWS 键的键盘快捷方式保留供操作系统使用。 |
[in] vk
类型:UINT
热键的虚拟键代码。 请参阅 虚拟密钥代码。
返回值
类型:BOOL
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。 若要获取扩展的错误信息,请调用 GetLastError。
如果尝试将热键与另一个线程创建的窗口相关联,则此函数将失败。
通常,如果为热键指定的击键已注册另一个热键,RegisterHotKey 也会失败。 但是,当某个应用的窗口位于前台时,OS 注册的某些预先存在的默认热键(如启动 Snipping 工具的 PrintScreen)可能会被另一个热键注册覆盖。
言论
按下某个键时,系统会查找针对所有热键的匹配项。 找到匹配项后,系统会将 WM_HOTKEY 消息发布到与热键关联的窗口的消息队列。 如果热键未与窗口关联,则会将 WM_HOTKEY 消息发布到与热键关联的线程。
如果热键已存在同一 hWnd,并且 id 参数,则会与新的热键一起维护。 应用程序必须显式调用 UnregisterHotKey 才能注销旧的热键。
F12 密钥保留供调试器随时使用,因此不应将其注册为热键。 即使未调试应用程序,如果内核模式调试器或实时调试器驻留,则保留 F12。
应用程序必须在0x0000到0xBFFF的范围内指定 ID 值。 共享 DLL 必须通过 0xFFFF(GlobalAddAtom 函数返回的范围)指定0xC000区域中的值。 为了避免与其他共享 DLL 定义的热键标识符冲突,DLL 应使用 GlobalAddAtom 函数来获取热键标识符。
**Windows Server 2003:**如果热键已存在具有相同的 hWnd 和 id 参数,则它将被新的热键替换。
例子
以下示例演示如何将 RegisterHotKey 函数与 MOD_NOREPEAT 标志一起使用。
在此示例中,为主线程注册了热键“ALT+b”。 按下热键后,线程将收到一条
#include "stdafx.h"
int _cdecl _tmain (
int argc,
TCHAR *argv[])
{
if (RegisterHotKey(
NULL,
1,
MOD_ALT | MOD_NOREPEAT,
0x42)) //0x42 is 'b'
{
_tprintf(_T("Hotkey 'ALT+b' registered, using MOD_NOREPEAT flag\n"));
}
MSG msg = {0};
while (GetMessage(&msg, NULL, 0, 0) != 0)
{
if (msg.message == WM_HOTKEY)
{
_tprintf(_T("WM_HOTKEY received\n"));
}
}
return 0;
}
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows Vista [仅限桌面应用] |
支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | 窗户 |
标头 | winuser.h (包括 Windows.h) |
库 | User32.lib |
DLL | User32.dll |