要實作一個無論視窗是否啟用都能接收按鍵的螢幕鍵盤,必須使用系統範圍的全域鉤子。本文為系列第一篇,介紹鉤子基本概念、作用範圍、Windows 14 種鉤子類型,並聚焦於 WH_KEYBOARD_LL 低階鍵盤鉤子。
鉤子是 Windows 提供的訊息處理機制:在訊息到達目標視窗前,先由鉤子程序攔截,可檢查、修改、丟棄或繼續傳遞訊息。鉤子實際上是一個處理訊息的程式碼片段,透過系統調用掛入鉤子鏈中。
| 類型 | 範圍 | 說明 |
|---|---|---|
| 局部鉤子 | 僅當前進程 | 攔截自身進程的事件,無需 DLL。 |
| 遠端鉤子 - 基於執行緒 | 指定進程的特定執行緒 | 需 DLL 注入,觀察特定執行緒事件。 |
| 遠端鉤子 - 系統範圍 | 所有進程所有執行緒 | 最強大但效能影響最大,必須放在 DLL 中。 |
WH_KEYBOARD_LL (13):低階鍵盤鉤子,攔截執行緒訊息佇列中的鍵盤訊息(WM_KEYDOWN 等)。**本系列使用**。WH_MOUSE_LL (14):低階滑鼠鉤子,攔截滑鼠訊息。WH_KEYBOARD (2):傳統鍵盤鉤子,需 DLL,僅攔截特定執行緒。WH_MOUSE (7):傳統滑鼠鉤子。WH_GETMESSAGE (3):攔截 GetMessage/PeekMessage。WH_CALLWNDPROC (4):攔截視窗程序呼叫前。理解鉤子機制、範圍與類型選擇,是實作螢幕鍵盤的理論基礎。下一篇將定義滑鼠/鍵盤輸入結構體並封裝 SendInput 等關鍵 API。