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 パラメーターには、次の値の組み合わせを指定できます。

説明
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 を呼び出します。

解説

キーが押されると、システムはすべてのホット キーとの一致を検索します。 一致するものを見つけると、システムはホット キーが関連付 けられているウィンドウのメッセージ キューに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 呼び出しで取得されます。 この例では 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