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

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 メッセージはホット キーに関連付けられているスレッドに投稿されます。

同じ hWndid パラメーターを持つホット キーが既に存在する場合は、新しいホット キーと共に保持されます。 アプリケーションは、古いホット キー 登録を解除するために、UnregisterHotKey を明示的に呼び出す必要があります。

F12 キーは常にデバッガーで使用するために予約されているため、ホット キーとして登録しないでください。 アプリケーションをデバッグしていない場合でも、カーネル モード デバッガーまたは Just-In-Time デバッガーが常駐している場合に備えて、F12 が予約されます。

アプリケーションは、0xBFFFを介して0x0000範囲内の ID 値を指定する必要があります。 共有 DLL では、0xFFFF (GlobalAddAtom 関数によって返される範囲) 0xC000範囲内の値を指定する必要があります。 他の共有 DLL で定義されているホット キー識別子との競合を回避するには、DLL で GlobalAddAtom 関数を使用してホット キー識別子を取得する必要があります。

**Windows Server 2003: **同じ hWndID パラメーターを持つホット キーが既に存在する場合は、新しいホット キーに置き換えられます。

次の例は、RegisterHotKey 関数を MOD_NOREPEAT フラグと共に使用する方法を示しています。

この例では、ホットキー 'Alt + b' がメイン スレッドに登録されています。 ホットキーが押されると、スレッドは WM_HOTKEY メッセージを受け取り、GetMessage 呼び出しで取得されます。 この例では、fsModifiersMOD_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 の

WM_HOTKEY