學(xué)習(xí)使用鉤子函數(shù),一些問(wèn)題記錄下來(lái):
1 局部鉤子在使用鉤子的程序中定義,使用,只能鉤使用這個(gè)鉤子的程序的消息,有些鉤子只能做全局鉤子。具體見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 |
使用鍵盤鉤子可以完全鉤除消息,使得目標(biāo)程序得不到鍵盤消息,在安裝鉤子的時(shí)候處理完了,不把它交給下一個(gè)鉤子。
return CallNextHookEx() 的時(shí)候直接return 1,注意不能返回0。
剩下一個(gè)小問(wèn)題,鉤子鉤到的消息中,可以使用GetKeyNameText(lParam,szText,iLen)得到鍵名,仔細(xì)看了lParam的說(shuō)明和值,實(shí)在不明白怎么處理出來(lái)的,可能底層還有個(gè)對(duì)應(yīng)表之類的東西吧。