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 和 標識元 參數,請參閱以取得動作。
[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,且 標識碼 參數,則會與新的熱鍵一起維護。 應用程式必須明確地呼叫 unregisterHotKey ,才能取消註冊舊的熱鍵。
F12 金鑰會保留供調試程式隨時使用,因此不應將其註冊為經常性密鑰。 即使您未偵錯應用程式,如果內核模式調試程式或 Just-In-Time 調試程式是常駐的,則會保留 F12。
應用程式必須在範圍中指定標識碼值,0x0000到0xBFFF。 共用 DLL 必須透過 0xFFFF 指定範圍中的值0xC000 (GlobalAddAtom 函式所傳回的範圍)。 為了避免與其他共用 DLL 所定義的熱鍵標識符發生衝突,DLL 應該使用 GlobalAddAtom 函式來取得經常性密鑰標識碼。
**Windows Server 2003:**如果熱鍵已存在相同的 hWnd,且 標識符 參數,則會由新的熱鍵取代。
例子
下列範例示範如何使用 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 |
另請參閱
為目前應用程式註冊熱鍵 (CSRegisterHotkey)