VB.net中HOOK的应用(二)

VB.netHOOK的应用(二)

 

二、那么,在vb.net中对API的调用和Hook的实现上作了什么样的变化呢?

我们对应着一个问题一个问题来看:

1.       新建一个module,先写一下API的声明:

  Declare Function SetWindowsHookEx Lib "user32" Alias   "SetWindowsHookExA" (ByVal idHook As HookType, ByVal lpfn As HOOKPROC,  ByVal hmod As Integer, ByVal dwThreadId As Integer) As Integer

    Declare Function UnhookWindowsHookEx Lib "user32"     (ByVal hHook As Integer) As Integer

    Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Integer,   ByVal ncode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

和上面vb6里的声明比一下,你发现了什么?是不是数据类型发生了变化?integer代替了long。这个好理解,因为vb.net中integer定义为32位(4字节)的整数,值的范围是-231到231(首位是符号位),这与vb6中long的定义是一致的,因此,我们必须做一下这样的转换。

等等,还有一个变化,就是SetWindowsHookEx的参数lpfn的类型变成了HOOKPROC,那……那是什么意思。噢,wait,我再补一句声明先:

Public Delegate Function HOOKPROC(ByVal nCode As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

看出来什么了吗?HOOKPROC其实就是一个函数声明,但是前面有一个Delegate(委托)是什么意思?为什么在vb.net中不能用integer表示lpfn的类型了呢?我们回头看一下vb6中调用API的句子:

hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _

                MyKBHFunc, App.hInstance, 0)

Lpfn在这里被表示为AddressOf  MyKBHFunc

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值