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