2 回答

TA貢獻2080條經(jīng)驗 獲得超4個贊
WINDOW下可進行掛接的過濾函數(shù)有
WH_CALLWNDPROC,WH_CBT ,WH_DEBUG,WH_GETMESSAGE ,
WH_HARDWARE ,WH_JOURNALPLAYBACK ,
WH_JOURNALRECORD ,WH_MOUSE ,
WH_MSGFILTER ,WH_SYSMSGFILTER ,
WH_KEYBOARD
鍵盤過濾函數(shù) WH_KEYBOARD 是最常用最有用。
利用函數(shù)SetWindowsHookEx()將其掛接在函數(shù)鏈?zhǔn)住?br/>攔+截到消息是否傳遞給函 數(shù)鏈的下一個函數(shù)是由每個具體函數(shù)功能確定,用API函數(shù)的CallNextHookEx()來傳遞。
掛接函數(shù)是全局的,那么必須將其放在一個.DLL 動態(tài)鏈接庫中。
鍵盤掛鉤函數(shù)為例:
int FAR PASCAL KeyboardProc( int nCode,WORD wParam,DWORD lParam)
其中KeyboardProc為定義掛接函數(shù)名,該函數(shù)必須在模塊定義文件中利用 EXPORTS命 令進行說明;nCode決定掛接函數(shù)是否對當(dāng)前消息進行處理;wParam和lParam為具體 的消息內(nèi)容。
卸鉤 調(diào)用一次 UnhookWindowsHookEx(iProc)
動態(tài)鏈接庫調(diào)用有3種方法。
1.在DEF定義文件中直接用函數(shù)名或序號說明:
EXPORTS WEP @1 RESIDENTNAME InitHooksDll
@2 InstallFilter
@3 KeyboardProc
@4
用序號說明格式為:鏈接庫名.函數(shù)名(如本例中說明方法為KEYDLL.KeyboardProc)。
2.在應(yīng)用程序中利用函數(shù)直接調(diào)用:
首先在應(yīng)用程序中利用LoadLibrary(LPSTR "鏈接庫名")將動態(tài)鏈接庫裝入,并取得 裝載庫模塊句柄hInst,
然后直接利用GetProcAddress(HINSTANCE hInst,LPSTR "函 數(shù)過程名")獲取函數(shù)地址,然后直接調(diào)用該地址即可,
程序結(jié)束前利用函數(shù) FreeLibrary( )釋放裝入的動態(tài)鏈接庫即可。
3.利用輸入庫.LIB方法 利用IMPLIB.EXE程序在建立動態(tài)鏈接庫的同時建立相應(yīng)的輸入庫.LIB,然后直接在 項目文件中增加該輸入庫。
- 2 回答
- 0 關(guān)注
- 1420 瀏覽
添加回答
舉報