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 等等。 系統似乎沒有回應。
不同于大部分其他全域攔截程式, JournalRecordProc 和 JournalPlaybackProc 攔截程式一律會在設定攔截的執行緒內容中呼叫。
攔截程式將控制權傳回系統之後,訊息會繼續處理。 如果程式代碼HC_SKIP,攔截程式必須準備在其下一次呼叫時傳回下一個記錄的事件訊息。
在對 SetWindowsHookEx函式的呼叫中指定WH_JOURNALPLAYBACK類型和攔截程式的指標,以安裝JournalPlaybackProc攔截程式。
如果使用者在日誌播放期間按下 CTRL+ESC 或 CTRL+ALT+DEL,系統會停止播放、取消日誌播放程式,並將 WM_CANCELJOURNAL 訊息張貼至日誌應用程式。
如果勾點程式傳回範圍中的訊息 WM_KEYFIRSTWM_KEYLAST,則適用下列條件:
- EVENTMSG結構的paramL成員會指定按下之按鍵的虛擬按鍵碼。
- EVENTMSG結構的paramH成員會指定掃描程式碼。
- 沒有辦法指定重複計數。 一律會採用事件來代表一個索引鍵事件。