当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > VB.net中HOOK的应用(一)

ASP.NET
Asp.Net 通用数据操作类 (附通用数据基类)
asp.net汉字转拼音和获取汉字首字母的代码
asp.net 多字段模糊查询代码
OpenCms 带分页的新闻列表
URLRewriter最简单入门介绍 URLRewriter相关资源
asp.net Repeater取得CheckBox选中的某行某个值
asp.net清空Cookie的两种方法
asp.net一些很酷很实用的.Net技巧
asp.net生成高质量缩略图通用函数(c#代码),支持多种生成方式
asp.net TripleDES加密、解密算法
Asp.net中防止用户多次登录的方法
asp.net Repeater取得CheckBox选中的某行某个值的c#写法
asp.net DataGridView导出到Excel的三个方法[亲测]
C#,winform,ShowDialog,子窗体向父窗体传值
asp.net学习中发现的比较完整的流程
ASP.net 页面被关闭后,服务器端是否仍然执行中?
asp.net Context.Handler 页面间传值方法
asp.net xml序列化与反序列化
asp.net实例代码protected override void Render(HtmlTextWriter writer)
asp.net(c#)捕捉搜索引擎蜘蛛和机器人

ASP.NET 中的 VB.net中HOOK的应用(一)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 208 ::
收藏到网摘: n/a

本文不是讲解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 LongPublic Const WH_KEYBOARD = 2 ‘这个是表明Hook的种类是键盘HookPublic Const PM_KEY_SPACE = &H20 ‘空格键3.代码段Public Sub UnHookKBD()  ‘解键盘HOOK函数If hnextHookproc <> 0 ThenUnHookWindowsHookEx hnextHookprochnextHookproc = 0End IfEnd SubPublic Function EnableKBDHook() ‘设置键盘HOOKIf hnextHookproc <> 0 ThenExit FunctionEnd IfhnextHookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _MyKBHFunc, App.hInstance, 0)If hnextHookproc <> 0 ThenEnableKBDHook = hnextHookprocEnd IfEnd FunctionPublic Function MyKBHFunc(ByVal iCode As Long, _ByVal wParam As Long, ByVal lParam As Long) As LongMyKBHFunc = 0If iCode < 0 ThenMyKBHFunc = CallNextHookEx(hnextHookproc, iCode, wParam, lParam)Exit FunctionEnd IfIf wParam = PM_KEY_SPACE Then ''偵測 有沒有按到空格鍵MyKBHFunc = 1‘加入自己的代码,用于表明响应    form1.text1.text=”Hook成功!”End IfEnd Function4.在Form中的代码很简单:Private Sub Form_Load()Call EnableKBDHookEnd SubPrivate Sub Form_Unload(Cancel As Integer)Call UnHookKBDEnd Sub打完收工!现在在form窗体状态下,敲空格键,就会响应你在MyKBHFunc函数中写的代码了。