WINDOWS鍵盤事件上掛接監(jiān)控函數(shù)的方法

字號:

WINDOW下可進行掛接的過濾函數(shù)包括11種:
    WH_CALLWNDPROC 窗口函數(shù)的過濾函數(shù)
    WH_CBT 計算機培訓過濾函數(shù)
    WH_DEBUG 調試過濾函數(shù)
    WH_GETMESSAGE 獲取消息過濾函數(shù)
    WH_HARDWARE 硬件消息過濾函數(shù)
    WH_JOURNALPLAYBACK 消息重放過濾函數(shù)
    WH_JOURNALRECORD 消息記錄過濾函數(shù)
    WH_MOUSE 鼠標過濾函數(shù)
    WH_MSGFILTER 消息過濾函數(shù)
    WH_SYSMSGFILTER 系統(tǒng)消息過濾函數(shù)
    WH_KEYBOARD 鍵盤過濾函數(shù)
    其中鍵盤過濾函數(shù)是常用有用的過濾函數(shù)類型,不管是哪一種類型的過濾函 數(shù),其掛接的基本方法都是相同的。 WINDOW調用掛接的反調函數(shù)時總是先調用掛接鏈首的那個函數(shù),因此必須將鍵盤掛 鉤函數(shù)利用函數(shù)SetWindowsHookEx()將其掛接在函數(shù)鏈首。至于消息是否傳遞給函 數(shù)鏈的下一個函數(shù)是由每個具體函數(shù)功能確定的,如果消息需要傳統(tǒng)給下一個函 數(shù),可調用API函數(shù)的CallNextHookEx()來實現(xiàn),如果不傳遞直接返回即可。
    掛接函數(shù)可以是用來監(jiān)控所有線程消息的全局性函數(shù),也可以是單獨監(jiān)控某一線程 的局部性函數(shù)。如果掛接函數(shù)是局部函數(shù),可以將它放到一個.DLL動態(tài)鏈接庫中, 也可以放在一個局部模塊中;如果掛接函數(shù)是全局的,那么必須將其放在一個.DLL 動態(tài)鏈接庫中。掛接函數(shù)必須嚴格按照下述格式進行聲明,以鍵盤掛鉤函數(shù)為例:
    int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam) 其中KeyboardProc為定義掛接函數(shù)名,該函數(shù)必須在模塊定義文件中利用EXPORTS命 令進行說明;nCode決定掛接函數(shù)是否對當前消息進行處理;wParam和lParam為具體 的消息內容。