学习使用钩子函数,一些问题记录下来:
  
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的说明和值,实在不明白怎么处理出来的,可能底层还有个对应表之类的东西吧。