WH_KEYBOARD_LL和WH_KEYBOARD参数比较

什么是Hook函数

  WINDOW的消息处理机制为了能在应用程序中监控系统的各种事件消息,提供了挂接各种反调函数(HOOK)的功能。这种挂钩函数(HOOK)类似扩充中断驱动程序,挂钩上可以挂接多个反调函数构成一个挂接函数链。系统产生的各种消息首先被送到各种挂接函数,挂接函数根据各自的功能对消息进行监视、修改和控制等,然后交还控制权或将消息传递给下一个挂接函数以致最终达到窗口函数。WINDOW系统的这种反调函数挂接方法虽然会略加影响到系统的运行效率,但在很多场合下是非常有用的,通过合理有效地利用键盘事件的挂钩函数监控机制可以达到预想不到的良好效果。

注意和区别

  1、Keyboard的HOOK函数分为两种,WH_KEYBOARD_LL和WH_KEYBOARD。我们一般用第一种,全局的键盘钩子,能拦截所有的键盘按键的消息。

  2、网上有人说,全局的钩子要放在单独的DLL中才能使用。我试了一下,不放在单独的DLL中,在XP+VS2005下,调试和运行都没有问题;在XP+VS2008下,调试会出错,不过编译后能运行;在WIN7+VS2010下,调试会出错,编译后能运行。这方面有研究的网友,望不吝赐教。

  3、WH_KEYBOARD_LL和WH_KEYBOARD,这是两种不同的钩子,虽然最后都是KeyboardHookProc函数处理拦截的消息,但是具体的每个参数的意义却完全不一样。

     WH_KEYBOARD钩子。KeyboardHookProc函数的各个参数意义如下:

  1.  
  2.     nCode    消息的类型,分HC_ACTION和HC_NOREMOVE
  3.  
  4.     wParam    按键的虚拟键码 
  5.  
  6.     lParam    按键的相关参数信息,包括重复时间、按键的状态(按下或弹起)等

    WH_KEYBOARD_LL钩子。KeyboardHookProc函数的各个参数意义如下: 

  1.  
  2.      nCode    消息的类型,有HC_ACTION
  3.  
  4.     wParam    按键的状态(按下或弹起)WM_KEYDOWN、WM_KEYUP、WM_SYSKEYDOWN、WM_SYSKEYUP
  5.  
  6.     lParam    指向KeyboardHookStruct结构的指针,该结构包含了按键的详细信息。    

  可以看出,这两种钩子的参数的定义是完全不一样的。而在之前的代码中:Dim MyKeyboardHookStruct As KeyboardHookStruct = DirectCast(Marshal.PtrToStructure(lParam, GetType(KeyboardHookStruct)), KeyboardHookStruct)就是将该指针指向的内容复制到指定的结构中。


发布日期:

所属分类: 易语言 标签: