共用方式為


LowLevelKeyboardProc 函式

Description

SetWindowsHookExA/SetWindowsHookExW函式搭配使用的應用程式定義或程式庫定義回呼函式。 每當新的鍵盤輸入事件即將張貼到執行緒輸入佇列時,系統會呼叫此函式。

注意

呼叫此回呼函式以回應金鑰狀態的變更時,會在更新金鑰的非同步狀態之前呼叫回呼函式。 因此,無法藉由從回呼函式內呼叫 GetAsyncKeyState 來判斷金鑰的非同步狀態。

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

LRESULT CALLBACK LowLevelKeyboardProc(
  _In_ int    nCode,
  _In_ WPARAM wParam,
  _In_ LPARAM lParam
);

參數

程式碼 [in]

類型: int

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

如果 nCode 小於零,攔截程式必須將訊息傳遞至 CallNextHookEx 函式,而不需進一步處理,而且應該傳回 CallNextHookEx傳回的值。

此參數可以是下列其中一個值。

意義
HC_ACTION 0 wParamlParam參數包含鍵盤訊息的相關資訊。

wParam [in]

類型: WPARAM

鍵盤訊息的識別碼。

此參數可以是下列其中一個訊息: WM_KEYDOWNWM_KEYUPWM_SYSKEYDOWNWM_SYSKEYUP

lParam [in]

類型: LPARAM

KBDLLHOOKSTRUCT結構的指標。

傳回

類型: LRESULT

如果 nCode 小於零,攔截程式必須傳回 CallNextHookEx傳回的值。

如果 nCode 大於或等於零,且攔截程式未處理訊息,強烈建議您呼叫 CallNextHookEx 並傳回傳回的值;否則,已安裝 WH_KEYBOARD_LL 勾點的其他應用程式將不會收到勾點通知,因此的行為可能會不正確。

如果攔截程式處理了訊息,它可能會傳回非零值,以防止系統將訊息傳遞至攔截鏈結的其餘部分或目標視窗程式。

備註

應用程式會藉由在呼叫 SetWindowsHookExA/SetWindowsHookExW函式中指定WH_KEYBOARD_LL勾點類型和攔截程式的指標來安裝攔截程式。

這個勾點會在安裝它的執行緒內容中呼叫。 呼叫是藉由將訊息傳送至已安裝攔截的執行緒來進行。 因此,安裝攔截的執行緒必須有訊息迴圈。

鍵盤輸入可以來自本機鍵盤驅動程式或呼叫 keybd_event 函式。 如果輸入來自 對keybd_event的呼叫,則輸入會「插入」。 不過, WH_KEYBOARD_LL 勾點不會插入另一個進程。 相反地,內容會切換回安裝攔截的程式,並在其原始內容中呼叫它。 然後,內容會切換回產生事件的應用程式。

攔截程式應該在下列登錄機碼中,以小於 LowLevelHooksTimeout 值中指定的資料項目來處理訊息:

HKEY_CURRENT_USER**\**Control Panel**\**Desktop

值會以毫秒來表示。 如果攔截程式逾時,系統會將訊息傳遞至下一個勾點。 不過,在 Windows 7 和更新版本上,勾點會以無訊息方式移除,而不會被呼叫。 應用程式無法得知是否已移除勾點。

Windows 10 1709 版和更新版本系統允許的逾時值上限為 1000 毫秒, (1 秒) 。 如果 LowLevelHooksTimeout 值設定為大於 1000 的值,系統預設會使用 1000 毫秒的逾時。

注意

偵錯攔截無法追蹤這種類型的低階鍵盤勾點。 如果應用程式必須使用低階勾點,它應該在將工作關閉給背景工作執行緒的專用線程上執行攔截,然後立即傳回。 在應用程式需要使用低階勾點的大多數情況下,應該改為監視原始輸入。 這是因為原始輸入可以非同步監視以其他執行緒為目標的滑鼠和鍵盤訊息,比低階勾點更有效率。 如需原始輸入的詳細資訊,請參閱 原始輸入

另請參閱

CallNextHookEx

KBDLLHOOKSTRUCT

keybd_event

SetWindowsHookEx

WM_KEYDOWN

WM_KEYUP

WM_SYSKEYDOWN

WM_SYSKEYUP

勾點

關於勾點