KeyboardProc コールバック関数
説明
SetWindowsHookExA/SetWindowsHookExW 関数で使用されるアプリケーション定義またはライブラリ定義のコールバック関数。
アプリケーションが GetMessage または PeekMessageA/PeekMessageW 関数を呼び出し、処理するキーボード メッセージ (WM_KEYUPまたはWM_KEYDOWNがある場合は常に、この関数を呼び出します。
HOOKPROC 型は、このコールバック関数へのポインターを定義します。 KeyboardProc は、アプリケーション定義またはライブラリ定義関数名のプレースホルダーです。
LRESULT CALLBACK KeyboardProc(
_In_ int code,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
パラメーター
code [in]
型: int
フック プロシージャがメッセージの処理方法を決定するために使用するコード。
コードが 0 未満の場合、フック プロシージャは、それ以上の処理を行わずにメッセージを CallNextHookEx 関数に渡す必要があり、CallNextHookEx によって返される値を返す必要があります。
このパラメーターには、次の値のいずれかを指定できます。
値 | 説明 |
---|---|
HC_ACTION 0 | wParam パラメーターと lParam パラメーターには、キーストローク メッセージに関する情報が含まれています。 |
HC_NOREMOVE 3 | wParam パラメーターと lParam パラメーターにはキーストローク メッセージに関する情報が含まれており、キーストローク メッセージはメッセージ キューから削除されていません。 ( PeekMessage 関数と呼ばれるアプリケーションで、 PM_NOREMOVE フラグを指定します)。 |
wParam [in]
型: WPARAM
キーストローク メッセージを生成したキーの 仮想キー コード 。
lParam [in]
型: LPARAM
繰り返し数、スキャン コード、拡張キー フラグ、コンテキスト コード、前のキー状態フラグ、および遷移状態フラグ。 lParam パラメーターの詳細については、「キーストローク メッセージ フラグ」を参照してください。 次の表では、この値のビットについて説明します。
Bits | 説明 |
---|---|
0-15 | 繰り返し数。 値は、ユーザーがキーを押した結果としてキーストロークが繰り返される回数です。 |
16-23 | スキャン コード。 値は、OEM によって異なります。 |
24 | キーが拡張キー (ファンクション キーやテンキーのキーなど) であるかどうかを示します。 キーが拡張キーの場合、値は 1 です。それ以外の場合は 0 です。 |
25-28 | 予約済み。 |
29 | コンテキスト コード。 Alt キーがダウンしている場合、値は 1 です。それ以外の場合は 0 です。 |
30 | 以前のキーの状態。 メッセージが送信される前にキーがダウンしている場合、値は 1 です。キーがアップしている場合は 0 です。 |
31 | 遷移の状態。 キーが押されている場合は 0、解放されている場合は 1 です。 |
戻り値
型: LRESULT
コードが 0 未満の場合、フック プロシージャは CallNextHookEx によって返される値を返す必要があります。
コードが 0 以上で、フック プロシージャがメッセージを処理しなかった場合は、CallNextHookEx を呼び出して、返される値を返すように強くお勧めします。それ以外の場合、WH_KEYBOARDフックがインストールされている他のアプリケーションはフック通知を受け取らず、結果として正しく動作しない可能性があります。
フック プロシージャがメッセージを処理した場合、システムがフック チェーンまたはターゲット ウィンドウ プロシージャの残りの部分にメッセージを渡さないようにするために、0 以外の値を返す可能性があります。
注釈
アプリケーションは、setWindowsHookExA/SetWindowsHookExW 関数の呼び出しで、WH_KEYBOARDフックの種類とフック プロシージャへのポインターを指定して、フック プロシージャをインストールします。
このフックは、インストールしたスレッドのコンテキストで呼び出される場合があります。 呼び出しは、フックをインストールしたスレッドにメッセージを送信することによって行われます。 したがって、フックをインストールしたスレッドにはメッセージ ループが必要です。