次の方法で共有


JournalPlaybackProc 関数

説明

警告

ジャーナリング フック API は、Windows 11以降サポートされていないため、今後のリリースで削除される予定です。 このため、代わりに SendInput TextInput API を呼び出す必要があります。

SetWindowsHookExA SetWindowsHookExW関数で使用されるアプリケーション定義またはライブラリ定義のコールバック関数。/ この関数は、システムがシステム・メッセージ待ち行列から除去したメッセージを記録します。 後で、アプリケーションで JournalPlaybackProc フック プロシージャを使用してメッセージを再生できます。

注意

通常、アプリケーションはこの関数を使用して、 JournalRecordProc フック プロシージャによって以前に記録された一連のマウス メッセージとキーボード メッセージを再生します。 JournalPlaybackProc フック プロシージャがインストールされている限り、通常のマウスとキーボードの入力は無効になります。

HOOKPROC 型は、このコールバック関数へのポインターを定義します。 JournalRecordProc は、アプリケーション定義またはライブラリ定義関数名のプレースホルダーです。

LRESULT CALLBACK JournalRecordProc(
  _In_ int    code,
       WPARAM wParam,
  _In_ LPARAM lParam
);

パラメーター

code [in]

型: int

フック プロシージャがメッセージの処理方法を決定するために使用するコード。

コードが 0 未満の場合、フック プロシージャは、それ以上の処理を行わずにメッセージを CallNextHookEx 関数に渡す必要があり、CallNextHookEx によって返される値を返す必要があります。

このパラメーターには、次の値のいずれかを指定できます。

説明
HC_GETNEXT 1 フック・プロシージャーは、現在のマウスまたはキーボード・メッセージを、lParam パラメーターが指す EVENTMSG 構造体にコピーする必要があります。
HC_NOREMOVE 3 アプリケーションが PeekMessage 関数を呼び出し、wRemoveMsg を PM_NOREMOVEに設定し、 PeekMessage 処理後にメッセージがメッセージ キューから削除されないことを示しています。
HC_NOREMOVE 2 フック・プロシージャーは、次のマウスまたはキーボード・メッセージを、lParam が指す EVENTMSG 構造体にコピーする準備をしなければなりません。 HC_GETNEXT コードを受け取った後、フック プロシージャはメッセージを 構造体にコピーする必要があります。
HC_SYSMODALOFF 5 システム モーダル ダイアログ ボックスが破棄されました。 フック プロシージャは、メッセージの再生を再開する必要があります。
HC_SYSMODALON 4 システム モーダル ダイアログ ボックスが表示されています。 ダイアログ ボックスが破棄されるまで、フック プロシージャはメッセージの再生を停止する必要があります。

wParam

型: WPARAM

このパラメーターは使用されません。

lParam

型: LPARAM

フック・プロシージャーによって処理されるメッセージを表す EVENTMSG 構造体へのポインター。 このパラメーターは、 コード パラメーターが HC_GETNEXTされている場合にのみ有効です。

戻り値

型: LRESULT

メッセージを処理する前にシステムを待機させるには、戻り値は、システムが待機する必要がある時間 (クロック ティック単位) である必要があります。

(この値は、現在の入力メッセージと以前の入力メッセージの時間メンバーの差を計算することによって計算できます)。

メッセージをすぐに処理するには、戻り値を 0 にする必要があります。 戻り値は、フック コードが HC_GETNEXTされている場合にのみ使用されます。それ以外の場合は無視されます。

注釈

JournalPlaybackProc フック プロシージャは、入力メッセージを lParam パラメーターにコピーする必要があります。 メッセージは、 JournalRecordProc フック プロシージャを使用して以前に記録されている必要があります。これは、メッセージを変更しないでください。

同じメッセージを何度も取得するために、 コード パラメーターを HC_GETNEXT に設定してフック プロシージャを複数回呼び出すことができます。 コードHC_SKIPに設定した呼び出しは必要ありません。

コードHC_GETNEXTされ、戻り値が 0 より大きい場合、システムは戻り値で指定されたミリ秒単位でスリープ状態になります。 システムが続行すると、コードを HC_GETNEXTに設定してフック プロシージャをもう一度呼び出して、同じメッセージを取得します。 JournalPlaybackProc へのこの新しい呼び出しからの戻り値は 0 である必要があります。それ以外の場合、システムは戻り値で指定されたミリ秒単位でスリープ状態に戻り、JournalPlaybackProc を再度呼び出します。 システムが応答していないように見えます。

他のほとんどのグローバル フック プロシージャとは異なり、 JournalRecordProc および JournalPlaybackProc フック プロシージャは、常にフックを設定するスレッドのコンテキストで呼び出されます。

フック・プロシージャーが制御をシステムに戻した後、メッセージは引き続き処理されます。 コードHC_SKIPされている場合、フック プロシージャは、次の呼び出しで次に記録されたイベント メッセージを返すように準備する必要があります。

SetWindowsHookEx 関数の呼び出しで、WH_JOURNALPLAYBACK型とフック プロシージャへのポインターを指定して、JournalPlaybackProc フック プロシージャをインストールします。

ユーザーがジャーナルの再生中に Ctrl + Esc キーまたは Ctrl + Alt + DEL キーを押すと、システムは再生を停止し、ジャーナル再生プロシージャのフックを解除し、ジャーナル アプリケーションに WM_CANCELJOURNAL メッセージを投稿します。

フック プロシージャがWM_KEYLASTに WM_KEYFIRST 範囲内の メッセージを返す場合は、次の条件が適用されます。

  • EVENTMSG 構造体の paramL メンバーは、押されたキーの仮想キー コードを指定します。
  • EVENTMSG 構造体の paramH メンバーは、スキャン コードを指定します。
  • 繰り返し数を指定する方法はありません。 イベントは常に 1 つのキー イベントを表すために取得されます。

関連項目

CallNextHookEx

EVENTMSG

JournalRecordProc

PeekMessage

SetWindowsHookEx

WM_CANCELJOURNAL

フック