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
[in] id
型: int
ホット キーの識別子。 hWnd パラメーターが NULL の場合、ホット キーは特定のウィンドウではなく、現在のスレッドに関連付けられます。 同じ hWnd と id パラメーターを持つホット キーが既に存在する場合は、「実行されるアクションの解説」を参照してください。
[in] fsModifiers
型: UINT
WM_HOTKEY メッセージを生成するために、vk パラメーターで指定されたキーと組み合わせて押す必要があるキー。 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
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError
この関数は、別のスレッドによって作成されたウィンドウにホット キーを関連付けようとすると失敗します。
通常、RegisterHotKey は、ホット キーに指定されたキーストロークが既に別のホット キーに登録されている場合にも失敗します。 ただし、アプリのいずれかのウィンドウがフォアグラウンドにある場合、OS によって登録されている既存の既定のホットキー (Snipping ツールを起動する PrintScreen など) は、別のホット キー登録によってオーバーライドされる場合があります。
備考
キーが押されると、システムはすべてのホット キーとの一致を検索します。 一致するものを見つけると、システムはホット キーが関連付けられているウィンドウのメッセージ キューに WM_HOTKEY メッセージを投稿します。 ホット キーがウィンドウに関連付けられていない場合、WM_HOTKEY メッセージはホット キーに関連付けられているスレッドに投稿されます。
同じ hWnd と id パラメーターを持つホット キーが既に存在する場合は、新しいホット キーと共に保持されます。 アプリケーションは、古いホット キー 登録を解除するために、UnregisterHotKey を明示的に呼び出す必要があります。
F12 キーは常にデバッガーで使用するために予約されているため、ホット キーとして登録しないでください。 アプリケーションをデバッグしていない場合でも、カーネル モード デバッガーまたは Just-In-Time デバッガーが常駐している場合に備えて、F12 が予約されます。
アプリケーションは、0xBFFFを介して0x0000範囲内の ID 値を指定する必要があります。 共有 DLL では、0xFFFF (GlobalAddAtom 関数によって返される範囲) 0xC000範囲内の値を指定する必要があります。 他の共有 DLL で定義されているホット キー識別子との競合を回避するには、DLL で GlobalAddAtom 関数を使用してホット キー識別子を取得する必要があります。
**Windows Server 2003: **同じ hWnd と ID パラメーターを持つホット キーが既に存在する場合は、新しいホット キーに置き換えられます。
例
次の例は、RegisterHotKey 関数を MOD_NOREPEAT フラグと共に使用する方法を示しています。
この例では、ホットキー '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 [デスクトップ アプリのみ] |
ターゲット プラットフォーム の |
ウィンドウズ |
ヘッダー | winuser.h (Windows.h を含む) |
ライブラリ | User32.lib |
DLL | User32.dll |
関連項目
GlobalAddAtom の
現在のアプリのホットキーを登録する (CSRegisterHotkey)
現在のアプリのホットキーを登録する (CppRegisterHotkey)
UnregisterHotKey の