全面解析VB.NET HOOK功能
创始人
2024-06-10 11:01:05
0

在网上收集了大量的资料,但是这里还是不对原理进行分析,我们只是就调用VB.NET HOOK功能,以及vb.net中API使用的变化问题。由于VB.NET HOOK功能较多,本文中以最常用的键盘Hook为例进行分析。

#T#先来看一下在vb中是如何实现的。截的是空格键。表现的目标是:一个form,上面有一个textbox,不管焦点是否落在textbox里,按空格键,不会在textbox中输入一个空格,而是变成在textbox中写入一句话:“HOOK成功!”

1.在一个Module中写入下列代码

调用的API的申明:

  1. Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" 
    (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long 

函数说明:本函数是用于启动Hook设置。

idHook是Hook的类型,即处理的消息类型。

Lpfn是Hook子程(函数或过程)的地址指针。如果dwThreadId参数为0或是一个由别的进程创建的线程的标识,lpfn必须指向DLL中的Hook子程。除此以外,lpfn可以指向当前进程的一段Hook子程代码(我们利用的就是这个性质)。

hMod是应用程序实例的句柄,标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL。dwThreadId是与安装Hook子程相关联的线程的标识符,如果为0,Hook子程与所有的线程关联。 返回值:函数成功则返回Hook子程的句柄,失败返回NULL。

  1. Declare Function UnHookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long 

函数说明: 本函数是解除Hook之用。hHook是Hook函数的句柄。

  1. Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long 

函数说明:本函数的作用是将当前Hook链中的Hook信息传递给下一个Hook。
hHook是当前Hook的句柄,一个应用程序接收这个句柄,作为先前调用SetWindowsHookEx函数的结果。
nCode指的是传递到当前Hook过程的Hook代码,下一个Hook过程使用这段代码去决定如何处理Hook信息。
wParam指传递给当前Hook过程的wParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。
lParam指传递给当前Hook过程的lParam值,它的具体含义是由当前Hook链中的相关Hook的类型决定的。

2. 定义的常量是

  1. Public hnextHookproc As Long  
  2. Public Const WH_KEYBOARD = 2 ‘这个是表明Hook的种类是键盘Hook  
  3. Public Const PM_KEY_SPACE = &H20 ‘空格键 

3.VB.NET HOOK功能代码段

  1. Public Sub UnHookKBD()‘解键盘HOOK函数  
  2. If hnextHookproc <> 0 Then  
  3. UnHookWindowsHookEx hnextHookproc  
  4. hnextHookproc = 0 
  5. End If  
  6. End Sub  
  7. Public Function EnableKBDHook() ‘设置键盘HOOK  
  8. If hnextHookproc <> 0 Then  
  9. Exit Function  
  10. End If  
  11. hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _  
  12. MyKBHFunc, App.hInstance, 0)  
  13. If hnextHookproc <> 0 Then  
  14. EnableKBDHook = hnextHookproc 
  15. End If  
  16. End Function  
  17. Public Function MyKBHFunc(ByVal iCode As Long, _  
  18. ByVal wParam As Long, ByVal lParam As Long) As Long  
  19. MyKBHFunc = 0 
  20. If iCode < 0 Then  
  21. MyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)  
  22. Exit Function  
  23. End If  
  24. If wParam = PM_KEY_SPACE Then ''偵測 有沒有按到空格鍵  
  25. MyKBHFunc = 1 
  26. ‘加入自己的代码,用于表明响应  
  27. form1.text1.text=”Hook成功!”  
  28. End If  
  29. End Function 

4.在Form中的代码很简单

  1. Private Sub Form_Load()  
  2. Call EnableKBDHook  
  3. End Sub  
  4. Private Sub Form_Unload(Cancel As Integer)  
  5. Call UnHookKBD  
  6. End Sub   

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...