betway88电子书籍教程中心网文荟萃客户留言繁體中文
设为首页
加入收藏
联系betway88
您当前的位置:betway88 -> 教程中心 -> 编程经验 -> JAVA DotNet -> 教程内容 退出登录 betway88,
栏目导航
· Visual Basic· Delphi
· Visual C++· C++ Builder
· JAVA DotNet· 其他相关
热门教程
· 如何在Visual Basic...
· 使用Visual Basic操...
· 使用VB6.0设计Activ...
· VB动态调用外部函数...
· 建立一个程序员自己...
· 如何编写高质量的VB...
· [图文] 为更新到Visual Bas...
· 再谈在VB中调用VC++...
· 用VB语言编程实现JP...
· 用DTS实现SQL数据库...
相关教程
· VB.Net创建不规则窗...
· 把握VB.NET中的流(S...
· 把握VB.NET中的流(S...
· 把握VB.NET中的流(S...
· VB.NET中对象的克隆...
· [图文] VB.NET访问COM+
· Working with MS Ac...
· VB.net中HOOK的应用...
· Henry手记-VB.net ...
· Henry手记-VB.net ...

VB.net中HOOK的应用(一)
betway88,作者:佚名来源:本站整理发布时间:2005-12-29 18:02:29发布人:admin

减小字体 增大字体


VB.netHOOK的应用(一)

vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法。小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨。本人水平有限,不免错误与遗漏多多,请朋友们批评指正。

基本的想法是,写一系列的文章,讲解一下vb.netvb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法。如果时间允许,我希望自己能快快开展这个工作。更重要的是网友们的支持与鼓励会是我继续的源动力。

今天是第一次写,不知道从哪开始,权衡再三,决定从API调用问题开始入手。Vb的爱好者经常给我写信或发贴,询问vb.netAPI的变化,那么今天我们就一起来探讨一下。虽然微软推出vs.net的目的是要用于跨平台,那么Windows API是不被推荐使用的,但从此入手,能让我们更方便地理解vb.net所做的改变,所以:

Let’s GO………………………………………………

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

由于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设置。

idHookHook的类型,即处理的消息类型

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

hMod应用程序实例的句柄,标识包含lpfn所指的子程的DLL。如果dwThreadId 标识当前进程创建的一个线程,而且子程代码位于当前进程,hMod必须为NULL

dwThreadId与安装Hook子程相关联的线程的标识符,如果为0Hook子程与所有的线程关联。 返回值:函数成功则返回Hook子程的句柄,失败返回NULL

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

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

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函数中写的代码了。

(未完待续)


[] [返回上一页] [打 印] [betway sports,]
∷相关教程评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 网站地图 - 管理登录
Copyright 2020 betway88. All Rights Reserved .
浙ICP备05047688号