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 参数可以是以下值的组合。
[in] vk
类型: UINT
热键的虚拟密钥代码。 请参阅 虚拟密钥代码。
返回值
类型: BOOL
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
按下某个键时,系统会查找与所有热键的匹配项。 找到匹配项后,系统会将 WM_HOTKEY 消息发布到与热键关联的窗口的消息队列。 如果热键与窗口不关联,则 WM_HOTKEY 消息将发布到与热键关联的线程。
此函数无法将热键与其他线程创建的窗口相关联。
如果为热键指定的击键已由另一个热键注册,RegisterHotKey 将失败。
如果已存在具有相同 hWnd 和 id 参数的热键,它将与新的热键一起维护。 应用程序必须显式调用 UnregisterHotKey 才能取消注册旧的热键。
Windows Server 2003: 如果已存在具有相同 hWnd 和 id 参数的热键,则由新的热键替换。
F12 键保留供调试器随时使用,因此不应将其注册为热键。 即使未调试应用程序,也会保留 F12,以防内核模式调试器或实时调试器驻留。
应用程序必须在0x0000到0xBFFF的范围内指定 ID 值。 共享 DLL 必须在0xC000到 globalAddAtom 函数) 返回的范围0xFFFF (指定值。 为了避免与其他共享 DLL 定义的热键标识符冲突,DLL 应使用 GlobalAddAtom 函数获取热键标识符。
示例
以下示例演示如何将 RegisterHotKey 函数与 MOD_NOREPEAT 标志一起使用。 在此示例中,为main线程注册了热键“Alt+b”。 按下热键时,线程将收到 WM_HOTKEY 消息,该消息将在 GetMessage 调用中获取。 由于此示例使用 fsModifiers的MOD_NOREPEAT值MOD_ALT,因此,当释放“b”键,然后在按下“Alt”键时再次按下时,线程才会收到另一条WM_HOTKEY消息。
#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 [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
请参阅
概念性
引用
示例
反馈
提交和查看相关反馈