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
WM_HOTKEY メッセージを生成するために vk パラメーターで指定されたキーと組み合わせて押す必要があるキー。 fsModifiers パラメーターには、次の値の組み合わせを指定できます。
[in] vk
型: UINT
ホット キーの仮想キー コード。 「仮想キー コード」を参照してください。
戻り値
種類: BOOL
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
キーが押されると、システムはすべてのホット キーとの一致を検索します。 一致するものを見つけると、システムはホット キーが関連付 けられているウィンドウのメッセージ キューにWM_HOTKEY メッセージをポストします。 ホット キーがウィンドウに関連付けられていない場合、 WM_HOTKEY メッセージはホット キーに関連付けられているスレッドにポストされます。
この関数は、ホット キーを別のスレッドによって作成されたウィンドウに関連付けることはできません。
ホット キーに指定されたキーストロークが別のホット キーによって既に登録されている場合、RegisterHotKey は失敗します。
同じ hWnd パラメーターと id パラメーターを持つホット キーが既に存在する場合は、新しいホット キーと共に保持されます。 古いホット キーを登録解除するには、アプリケーションで UnregisterHotKey を明示的に呼び出す必要があります。
Windows Server 2003: 同じ hWnd パラメーターと id パラメーターを持つホット キーが既に存在する場合は、新しいホット キーに置き換えられます。
F12 キーは常にデバッガーで使用するために予約されているため、ホット キーとして登録しないでください。 アプリケーションをデバッグしていない場合でも、カーネル モード デバッガーまたは Just-In-Time デバッガーが常駐している場合に備えて、F12 が予約されます。
アプリケーションでは、0xBFFF 0x0000範囲内の id 値を指定する必要があります。 共有 DLL では、0xFFFF ( GlobalAddAtom 関数によって返される範囲) 0xC000範囲内の値を指定する必要があります。 他の共有 DLL で定義されているホット キー識別子との競合を回避するには、DLL で GlobalAddAtom 関数を使用してホット キー識別子を取得する必要があります。
例
次の例は、 registerHotKey 関数を MOD_NOREPEAT フラグと共に使用する方法を示しています。 この例では、ホットキー 'Alt + b' がメイン スレッドに登録されています。 ホットキーが押されると、スレッドは WM_HOTKEY メッセージを受け取り、 GetMessage 呼び出しで取得されます。 この例では fsModifiers のMOD_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 |
関連項目
概念
リファレンス
現在のアプリのホットキーを登録する (CSRegisterHotkey)
現在のアプリのホットキーを登録する (CppRegisterHotkey)
現在のアプリのホットキーを登録する (VBRegisterHotkey)
サンプル
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示