WH_KEYBOARD和WH_KEYBOARD_LL,这两个都是键盘钩子
区别:
1、MSDN上面说的是WH_KEYBOARD会在应用程序调用GetMessage 或者 PeekMessage函数并且有键盘消息(按下或者释放)的时候会调用相应的函数进行处理。WH_KEYBOARD的钩子过程在GetMessage或PeekMessage要取回一个键盘消息时调用,直接在被监视的线程中执行
2、WH_KEYBOARD_LL这个类型是只要有键盘输入事件的发生,它都会将键盘消息传给相应函数,WH_KEYBOARD类型的钩子只记录本程序的按键消息,对发送到其他程序的按键消息不予以响应。WH_KEYBOARD_LL的钩子过程在一个键盘消息被投递到一个线程的消息队列之前调用,这个是向安装钩子的线程发送消息,让安装钩子的线程执行钩子过程,WH_KEYBOARD_LL必须是全局钩子,而且不需要在dll中
3、WH_KEYBOARD类型的钩子只记录本程序的按键消息,对发送到其他程序的按键消息不予以响应。
4、WH_KEYBOARD_LL是在系统处理前处理的,所以很容易引起挂起之类的问题,不过操作系统通过LowLevelHooksTimeout控制超时,如果这个时间后HOOK函数还没返回,就直接被忽略了。
5、WH_KEYBOARD_LL这个类型的底层键盘钩子,来记录计算机上所有的键盘输入。
6、WH_KEYBOARD_LL底层键盘钩子用于截获系统热键,WH_KEYBOARD截获按健。
Msdn链接:
http://msdn.microsoft.com/en-us/library/ms644984(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms644985(v=VS.85).aspx