ホット キー コントロールについて

ホット キー コントロールは、ユーザーがホット キーとして使用するキーボード操作の組み合わせを入力できるようにするウィンドウです。 ホット キーは、ユーザーがすばやくアクションを実行するために押すことができるキーの組み合わせです。 たとえば、ユーザーは、特定のウィンドウをアクティブ化して z オーダーの先頭に移動するホット キーを作成できます。 ホット キー コントロールは、ユーザーの選択肢を表示し、ユーザーが有効なキーの組み合わせを選択することを確認します。 次のスクリーン ショットは、ユーザーが Alt キーを押した後に、ダイアログ ボックスにホット キー コントロールがどのように表示されるかを示しています。

screen shot of a dialog box that contains a hot key control

ホット キー コントロールの使用

ユーザーがホット キーとして使用するキーの組み合わせを入力すると、キーの名前がホット キー コントロールに表示されます。 キーの組み合わせは、修飾キー (Ctrl、Alt、Shift など) と付随キー (文字キー、方向キー、ファンクション キーなど) で構成できます。

ユーザーがキーの組み合わせを選択すると、アプリケーションはホット キー コントロールからキーの組み合わせを取得し、それを使用してシステムにホット キーを設定します。 ホット キー コントロールから取得される情報には、修飾子キーと付随キーの仮想キー コードを示すフラグが含まれます。

アプリケーションは、ホット キー コントロールによって提供される情報を使用して、グローバル ホット キーまたはスレッド固有のホット キーを設定できます。 グローバル ホット キーは特定のウィンドウに関連付けられます。これにより、ユーザーはシステムの任意の部分からウィンドウをアクティブ化できます。 アプリケーションは、WM_SETHOTKEY メッセージを使用してグローバル ホット キーを設定します。 ユーザーがグローバル ホット キーを押すたびに、WM_SETHOTKEY 指定されたウィンドウは、SC_HOTKEY 値を指定する WM_SYSCOMMAND メッセージを受け取ります。 このメッセージは、それを受け取るウィンドウをアクティブにします。 ホット キーは、WM_SETHOTKEY を呼び出し たアプリケーションが終了するまで有効です。

スレッド固有のホット キーは、メッセージ ループの次のイテレーションによって削除されるように、特定のスレッドの先頭にポストされるWM_HOTKEY メッセージを生成します。 アプリケーションは、RegisterHotKey 関数を使用してスレッド固有のホット キーを設定します。

ホット キー コントロール メッセージ

ホット キー コントロールを作成した後、アプリケーションは、HKM_SETRULESHKM_SETHOTKEYHKM_GETHOTKEY の 3 つのメッセージを使用して操作します。

アプリケーションは、HKM_SETRULES メッセージを送信して、無効なホット キーと見なされる CTRL、Alt、および Shift キーの組み合わせを指定できます。 アプリケーションで無効なキーの組み合わせを指定する場合は、ユーザーが無効な組み合わせを選択したときに使用する既定の修飾子の組み合わせも指定する必要があります。 ユーザーが無効な組み合わせを入力すると、無効な組み合わせと既定の組み合わせに対して論理 OR 演算が実行されます。 結果は有効な組み合わせと見なされます。文字列に変換され、コントロールに表示されます。

HKM_SETHOTKEY メッセージを使用すると、アプリケーションはホット キー コントロールのホット キーの組み合わせを設定できます。 このメッセージは、通常、ホット キー コントロールが作成されるときにも使用されます。

アプリケーションでは、HKM_GETHOTKEY メッセージを使用して、ユーザーが選択したホット キーの仮想キー コードと修飾子フラグを取得します。

ホット キー コントロールの通知

ホット キー コントロールは、WM_NOTIFY メッセージを経由して通知コードを送信しません。 ただし、ユーザーがコントロールの内容を 変更すると、WM_COMMAND メッセージを介して EN_CHANGE 通知が送信されます。

既定のホット キー メッセージ処理

このセクションでは、ホット キー コントロールで使用される定義済みの HOTKEY_CLASS ウィンドウ クラスのウィンドウ プロシージャによって処理されるウィンドウ メッセージについて説明します。

メッセージ 処理の実行
WM_CHAR 仮想キー コードを取得します。
WM_CREATE ホット キー コントロールを初期化し、ホット キー ルールをクリアし、システム フォントを使用します。
WM_ERASEBKGND キャレットを非表示にし、DefWindowProc 関数を呼び出して、キャレットをもう一度表示します。
WM_GETDLGCODE DLGC_WANTCHARS 値と DLGC_WANTARROWS 値の組み合わせを返します。
WM_GETFONT フォントを取得します。
WM_KEYDOWN キーが Enter、TAB、SPACE BAR、DEL、ESC、または BACKSPACE の場合は、DefWindowProc 関数を呼び出します。 キーが Shift、Ctrl、または Alt の場合は、組み合わせが有効かどうかをチェックし、有効な場合は、その組み合わせを使用してホット キーを設定します。 その他のすべてのキーはホット キーとして設定され、その有効性は最初にチェックされません。
WM_KEYUP 仮想キー コードを取得します。
WM_KILLFOCUS キャレットを破棄します。
WM_LBUTTONDOWN ウィンドウにフォーカスを設定します。
WM_NCCREATE WS_EX_CLIENTEDGEウィンドウ スタイルを設定します。
WM_PAINT ホット キー コントロールをペイントします。
WM_SETFOCUS キャレットを作成して表示します。
WM_SETFONT フォントを設定します。
WM_SYSCHAR 仮想キー コードを取得します。
WM_SYSKEYDOWN キーが Enter、TAB、SPACE BAR、DEL、ESC、または BACKSPACE の場合は、DefWindowProc 関数を呼び出します。 キーが Shift、Ctrl、または Alt の場合は、組み合わせが有効かどうかをチェックし、有効な場合は、その組み合わせを使用してホット キーを設定します。 その他のすべてのキーはホット キーとして設定され、その有効性は最初にチェックされません。
WM_SYSKEYUP 仮想キー コードを取得します。