转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
VB.net中HOOK的应用(一)         ★★★★

VB.net中HOOK的应用(一)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:965 更新时间:2009/4/23 19:00:37

本文不是讲解Hook原理的文章,仅是讨论一下在vb.net如何调用Hook功能,以及vb.net中API使用的变化问题。

由于Hook种类较多,本文中以最常用的键盘Hook为例进行分析。

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

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

调用的API的申明:

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。

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

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

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. 定义的常量是:

Public hnextHookproc As Long

Public Const WH_KEYBOARD = 2 ‘这个是表明Hook的种类是键盘Hook

Public Const PM_KEY_SPACE = &H20 ‘空格键

3.代码段

Public Sub UnHookKBD()  ‘解键盘HOOK函数

If hnextHookproc <> 0 Then

UnHookWindowsHookEx hnextHookproc

hnextHookproc = 0

End If

End Sub

Public Function EnableKBDHook() ‘设置键盘HOOK

If hnextHookproc <> 0 Then

Exit Function

End If

hnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _

MyKBHFunc, App.hInstance, 0)

If hnextHookproc <> 0 Then

EnableKBDHook = hnextHookproc

End If

End Function

Public Function MyKBHFunc(ByVal iCode As Long, _

ByVal wParam As Long, ByVal lParam As Long) As Long

MyKBHFunc = 0

If iCode < 0 Then

MyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)

Exit Function

End If

If wParam = PM_KEY_SPACE Then ''''''''偵測 有沒有按到空格鍵

MyKBHFunc = 1

‘加入自己的代码,用于表明响应

    form1.text1.text=”Hook成功!”

End If

End Function

4.在Form中的代码很简单:

Private Sub Form_Load()

Call EnableKBDHook

End Sub

Private Sub Form_Unload(Cancel As Integer)

Call UnHookKBD

End Sub

打完收工!现在在form窗体状态下,敲空格键,就会响应你在MyKBHFunc函数中写的代码了。


[VB.NET程序]VB.net中HOOK的应用(二)  [Delphi程序]Delphi中Hook技术全接触
[Delphi程序]浅谈API HOOK技术(二)  [Delphi程序]浅谈API HOOK技术(一)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台