JournalRecordProc 関数
説明
SetWindowsHookEx 関数で使用されるアプリケーション定義またはライブラリ定義のコールバック関数。 この関数は、システムがシステム・メッセージ待ち行列から除去するメッセージを記録します。 後で、アプリケーションは JournalPlaybackProc フック プロシージャを使用してメッセージを再生できます。
HOOKPROC 型は、このコールバック関数へのポインターを定義します。 JournalRecordProc は、アプリケーション定義またはライブラリ定義関数名のプレースホルダーです。
LRESULT CALLBACK JournalRecordProc(
_In_ int code,
WPARAM wParam,
_In_ LPARAM lParam
);
パラメーター
code [in]
型: int
メッセージの処理方法を指定します。 コードが 0 未満の場合、フック プロシージャは、それ以上の処理を行わずにメッセージを CallNextHookEx 関数に渡す必要があり、CallNextHookEx によって返される値を返す必要があります。 このパラメーターには、次の値のいずれかを指定できます。
値 | 説明 |
---|---|
HC_ACTION 0 | lParam パラメーターは、システム キューから削除されたメッセージに関する情報を含む EVENTMSG 構造体へのポインターです。 フック プロシージャでは、構造体の内容をバッファーまたはファイルにコピーして記録する必要があります。 |
HC_SYSMODALOFF 5 | システム モーダル ダイアログ ボックスが破棄されました。 フック・プロシージャーは記録を再開する必要があります。 |
HC_SYSMODALON 4 | システム モーダル ダイアログ ボックスが表示されています。 ダイアログ ボックスが破棄されるまで、フック プロシージャは記録を停止する必要があります。 |
wParam
種類: WPARAM
このパラメーターは使用されません。
lParam [in]
型: LPARAM
記録するメッセージを含む EVENTMSG 構造体へのポインター。
戻り値
型: LRESULT
戻り値は無視されます。
解説
JournalRecordProc フック プロシージャは、メッセージをコピーする必要がありますが、変更することはできません。 フック・プロシージャーがシステムに制御を戻した後も、メッセージは処理され続けます。
SetWindowsHookEx 関数の呼び出しで、WH_JOURNALRECORD型とフック プロシージャへのポインターを指定して、JournalRecordProc フック プロシージャをインストールします。
JournalRecordProc フック プロシージャは、ダイナミック リンク ライブラリに存在する必要はありません。 JournalRecordProc フック プロシージャは、アプリケーション自体で使用できます。
他のほとんどのグローバル フック プロシージャとは異なり、 JournalRecordProc および JournalPlaybackProc フック プロシージャは常に、フックを設定するスレッドのコンテキストで呼び出されます。
JournalRecordProc フック プロシージャをインストールしたアプリケーションは、VK_CANCEL仮想キー コード (ほとんどのキーボードで Ctrl + BREAK キーの組み合わせとして実装されます) に対してwatchする必要があります。 この仮想キー コードは、ユーザーがジャーナル記録を停止することを望むシグナルとしてアプリケーションによって解釈される必要があります。 アプリケーションは、記録シーケンスを終了し、 JournalRecordProc フック プロシージャを削除して応答する必要があります。 削除は重要です。 これにより、ジャーナル処理アプリケーションがフック・プロシージャー内にぶら下がってシステムをロックするのを防ぐことができます。
この役割は、ジャーンの記録を停止するシグナルとして、Ctrl + BREAK キーの組み合わせを記録できないことを意味します。 Ctrl + C キーの組み合わせにはジャーナリング シグナルなどの役割がないため、記録できます。 記録できない他の 2 つのキーの組み合わせがあります。Ctrl + Esc キーと Ctrl + Alt + DEL キーです。 これら 2 つのキーの組み合わせにより、システムはすべてのジャーナル処理 (レコードまたは再生) を停止し、すべてのジャーナリング・フックを除去し、 WM_CANCELJOURNAL メッセージをジャーナル処理アプリケーションにポストします。