學習使用鉤子函數,一些問題記錄下來:
1 局部鉤子在使用鉤子的程序中定義,使用,只能鉤使用這個鉤子的程序的消息,有些鉤子只能做全局鉤子。具體見MSDN。
Hook |
Scope |
WH_CALLWNDPROC |
Thread or global |
WH_CALLWNDPROCRET |
Thread or global |
WH_CBT |
Thread or global |
WH_DEBUG |
Thread or global |
WH_FOREGROUNDIDLE |
Thread or global |
WH_GETMESSAGE |
Thread or global |
WH_JOURNALPLAYBACK |
Global only |
WH_JOURNALRECORD |
Global only |
WH_KEYBOARD |
Thread or global |
WH_KEYBOARD_LL |
Global only |
WH_MOUSE |
Thread or global |
WH_MOUSE_LL |
Global only |
WH_MSGFILTER |
Thread or global |
WH_SHELL |
Thread or global |
WH_SYSMSGFILTER |
Global only |
使用鍵盤鉤子可以完全鉤除消息,使得目標程序得不到鍵盤消息,在安裝鉤子的時候處理完了,不把它交給下一個鉤子。
return CallNextHookEx() 的時候直接return 1,注意不能返回0。
剩下一個小問題,鉤子鉤到的消息中,可以使用GetKeyNameText(lParam,szText,iLen)得到鍵名,仔細看了lParam的說明和值,實在不明白怎么處理出來的,可能底層還有個對應表之類的東西吧。