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,则热键与当前线程关联,而不是与特定窗口相关联。 如果已存在具有相同 hWndid 参数的热键,请参阅所执行的操作的备注。

[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。

注解

按下某个键时,系统会查找与所有热键的匹配项。 找到匹配项后,系统会将 WM_HOTKEY 消息发布到与热键关联的窗口的消息队列。 如果热键与窗口不关联,则 WM_HOTKEY 消息将发布到与热键关联的线程。

此函数无法将热键与其他线程创建的窗口相关联。

如果为热键指定的击键已由另一个热键注册,RegisterHotKey 将失败。

如果已存在具有相同 hWndid 参数的热键,则会与新的热键一起进行维护。 应用程序必须显式调用 UnregisterHotKey 才能注销旧的热密钥。

Windows Server 2003: 如果已存在具有相同 hWndid 参数的热键,则由新的热键替换。

F12 密钥保留供调试器随时使用,因此不应将其注册为热键。 即使未调试应用程序,也会保留 F12,以防内核模式调试器或实时调试器驻留。

应用程序必须在0xBFFF 0x0000范围内指定 ID 值。 共享 DLL 必须在0xC000范围内指定值,0xFFFF (GlobalAddAtom 函数) 返回的范围。 为了避免与其他共享 DLL 定义的热键标识符冲突,DLL 应使用 GlobalAddAtom 函数获取热键标识符。

示例

以下示例演示如何将 RegisterHotKey 函数与 MOD_NOREPEAT 标志一起使用。 在此示例中,为main线程注册热键“Alt+b”。 按下热键时,线程将收到 WM_HOTKEY 消息,该消息将在 GetMessage 调用中获取。 由于此示例使用具有 fsModifiersMOD_NOREPEAT值的MOD_ALT,因此线程将仅在释放“b”键时收到另一条WM_HOTKEY消息,然后在按下“Alt”键时再次按下。


#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

请参阅

概念性

GlobalAddAtom

键盘输入

引用

为当前应用注册热键 (CSRegisterHotkey)

为当前应用注册热键 (CppRegisterHotkey)

为当前应用注册热键 (VBRegisterHotkey)

示例

UnregisterHotKey

WM_HOTKEY