LowLevelMouseProc 函式
Description
與SetWindowsHookExA/SetWindowsHookExW函式搭配使用的應用程式定義或程式庫定義回呼函式。 每當新的滑鼠輸入事件即將張貼到執行緒輸入佇列時,系統就會呼叫此函式。
HOOKPROC類型會定義這個回呼函式的指標。 LowLevelMouseProc 是應用程式定義或程式庫定義函數名稱的預留位置。
LowLevelMouseProc 是應用程式定義或程式庫定義函數名稱的預留位置。
LRESULT CALLBACK LowLevelMouseProc(
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
參數
nCode [in]
類型: int
攔截程式用來判斷如何處理訊息的程式碼。
如果 nCode 小於零,攔截程式必須將訊息傳遞至 CallNextHookEx 函式,而不需進一步處理,而且應該傳回 CallNextHookEx傳回的值。
此參數可以是下列其中一個值。
值 | 意義 |
---|---|
HC_ACTION 0 | wParam和lParam參數包含滑鼠訊息的相關資訊。 |
wParam [in]
類型: WPARAM
滑鼠訊息的識別碼。
此參數可以是下列其中一個訊息: WM_LBUTTONDOWN、 WM_LBUTTONUP、 WM_MOUSEMOVE、 WM_MOUSEWHEEL、 WM_RBUTTONDOWN 或 WM_RBUTTONUP。
lParam [in]
類型: LPARAM
MSLLHOOKSTRUCT結構的指標。
傳回
類型: LRESULT
如果 nCode 小於零,攔截程式必須傳回 CallNextHookEx傳回的值。
如果 nCode 大於或等於零,且攔截程式未處理訊息,強烈建議您呼叫 CallNextHookEx 並傳回傳回的值;否則,已安裝 WH_MOUSE_LL 勾點的其他應用程式將不會收到勾點通知,因此行為不正確。
如果攔截程式處理了訊息,它可能會傳回非零值,以防止系統將訊息傳遞至攔截鏈結的其餘部分或目標視窗程式。
備註
應用程式會藉由在呼叫SetWindowsHookExA/SetWindowsHookExW函式中指定WH_MOUSE_LL勾點類型和攔截程式的指標,來安裝攔截程式。
這個勾點會在安裝它的執行緒內容中呼叫。 呼叫是藉由將訊息傳送至已安裝攔截的執行緒來進行。 因此,安裝攔截的執行緒必須有訊息迴圈。
滑鼠輸入可以來自本機滑鼠驅動程式或呼叫 mouse_event 函式。 如果輸入來自 對mouse_event的呼叫,則輸入會「插入」。 不過, WH_MOUSE_LL 勾點不會插入另一個進程。 相反地,內容會切換回安裝攔截的程式,並在其原始內容中呼叫它。 然後,內容會切換回產生事件的應用程式。
攔截程式應該在下列登錄機碼中,以小於 LowLevelHooksTimeout 值中指定的資料項目來處理訊息:
HKEY_CURRENT_USER\Control Panel\Desktop
值會以毫秒來表示。 如果攔截程式逾時,系統會將訊息傳遞至下一個勾點。 不過,在 Windows 7 和更新版本上,勾點會以無訊息方式移除,而不會被呼叫。 應用程式無法得知是否已移除勾點。
Windows 10 1709 版和更新版本系統允許的逾時值上限為 1000 毫秒, (1 秒) 。 如果 LowLevelHooksTimeout 值設定為大於 1000 的值,系統預設會使用 1000 毫秒的逾時。
注意
偵錯攔截無法追蹤這種類型的低階滑鼠勾點。 如果應用程式必須使用低階勾點,它應該在將工作關閉給背景工作執行緒的專用線程上執行攔截,然後立即傳回。 在應用程式需要使用低階勾點的大多數情況下,應該改為監視原始輸入。 這是因為原始輸入可以非同步監視以其他執行緒為目標的滑鼠和鍵盤訊息,比低階勾點更有效率。 如需原始輸入的詳細資訊,請參閱 原始輸入。