JournalPlaybackProc 函式

Description

警告

從Windows 11開始不支援日誌勾點 API,未來版本將會移除。 因此,強烈建議改為呼叫 SendInput TextInput API。

應用程式定義或程式庫定義的回呼函式,用於SetWindowsHookExA/SetWindowsHookExW函式。 函式會記錄系統從系統訊息佇列中移除的訊息。 之後,應用程式可以使用 JournalPlaybackProc 攔截程式來播放訊息。

注意

一般而言,應用程式會使用此函式來播放 JournalRecordProc 攔截程式先前記錄的一系列滑鼠和鍵盤訊息。 只要已安裝 JournalPlaybackProc 攔截程式,就會停用一般滑鼠和鍵盤輸入。

HOOKPROC類型會定義這個回呼函式的指標。 JournalRecordProc 是應用程式定義或程式庫定義函數名稱的預留位置。

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

參數

程式碼 [in]

類型: int

攔截程式用來判斷如何處理訊息的程式碼。

如果 程式碼 小於零,攔截程式必須將訊息傳遞至 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

若要讓系統在處理訊息之前等候,傳回值必須是系統應該等候的時間量,以時鐘刻度為單位。

(這個值可以計算,方法是計算目前和先前輸入訊息中時間成員之間的差異。)

若要立即處理訊息,傳回值應該是零。 只有在勾點程式碼 HC_GETNEXT時,才會使用傳回值;否則會忽略它。

備註

JournalPlaybackProc攔截程式應該將輸入訊息複製到lParam參數。 先前必須使用 JournalRecordProc 攔截程式來記錄訊息,這不應該修改訊息。

若要來回擷取相同的訊息,可以呼叫勾點程式數次,並將程式 代碼 參數設定為 HC_GETNEXT ,而不需透過程式 代碼 設定為 HC_SKIP的插播呼叫。

如果程式代碼HC_GETNEXT且傳回值大於零,系統就會睡眠傳回值所指定的毫秒數。 當系統繼續時,它會再次呼叫攔截程式,並將程式 代碼 設定為 HC_GETNEXT 以擷取相同的訊息。 這個新呼叫 JournalPlaybackProc 的傳回值應該是零;否則,系統會回到睡眠狀態,以取得傳回值所指定的毫秒數、再次呼叫 JournalPlaybackProc 等等。 系統似乎沒有回應。

不同于大部分其他全域攔截程式, JournalRecordProcJournalPlaybackProc 攔截程式一律會在設定攔截的執行緒內容中呼叫。

攔截程式將控制權傳回系統之後,訊息會繼續處理。 如果程式代碼HC_SKIP,攔截程式必須準備在其下一次呼叫時傳回下一個記錄的事件訊息。

對 SetWindowsHookEx函式的呼叫中指定WH_JOURNALPLAYBACK類型和攔截程式的指標,以安裝JournalPlaybackProc攔截程式。

如果使用者在日誌播放期間按下 CTRL+ESC 或 CTRL+ALT+DEL,系統會停止播放、取消日誌播放程式,並將 WM_CANCELJOURNAL 訊息張貼至日誌應用程式。

如果勾點程式傳回範圍中的訊息 WM_KEYFIRSTWM_KEYLAST,則適用下列條件:

  • EVENTMSG結構的paramL成員會指定按下之按鍵的虛擬按鍵碼。
  • EVENTMSG結構的paramH成員會指定掃描程式碼。
  • 沒有辦法指定重複計數。 一律會採用事件來代表一個索引鍵事件。

另請參閱

CallNextHookEx

EVENTMSG

JournalRecordProc

PeekMessage

SetWindowsHookEx

WM_CANCELJOURNAL

勾點