VB编程中钩子的实现及应用

  Windows系统中钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows 系统中的消息进行拦截、监视、处理。这种技术可以广泛应用于各种软件,尤其是需要有监控、自动记录等对系统进行监测功能的软件。本文针对这个专题进行了探讨,希望可以为读者朋友们起到抛砖引玉的作用。

  一、钩子的机制及类型

  Windows的应用程序都是基于消息驱动的,应用程序的操作都依赖于它所得到的消息的类型及内容。钩子与Dos中断截获处理机制有类似之处。钩子(Hook)Windows消息处理机制的一个平台,通过安装各种钩子,应用程序可以在上面设置子程序以监视指定窗口的某种消息,并且当消息到达目标窗口之前处理它。

  在Windows中,钩子有两种,一种是系统钩子(RemoteHook),它对消息的监视是整个系统范围,另一种是线程钩子(LocalHook),它的拦截范围只有进程内部的消息。对于系统钩子,其钩子函数(HookFunction)应在Windows系统的动态链接库(DLL)中实现,而对于线程钩子来说,钩子函数可以在DLL之中实现,也可以在相应的应用程序之中实现。这是因为当开发人员创建一个钩子时,Windows先在系统内存中创建一个数据结构,该数据结构包含了钩子的相关信息,然后把该结构体加到已经存在的钩子链表中去,并且新的钩子将排在老的钩子的前面。当一个事件发生时,如果安装的是一个局部钩子,当前进程中的钩子函数将被调用。如果是一个远程钩子,系统就必须把钩子函数插入到其它进程的地址空间,要做到这一点就要求钩子函数必须在一个动态链接库中,所以如果想要使用远程钩子,就必须把该钩子函数放到动态链接库中去。对于钩子所监视的消息类型来说,Windws一共提供了如下几种类型:如表1所示:

表一、Windows消息类型



 

消息类型常量标识

消息类型

适用范围

WH_CALLWNDPROC

4

发给窗口的消息

线程或系统

WH_CALLWNDPROCRET

12

窗口返回的消息

线程或系统

WH_CBT

5

窗口变化、焦点设定等消息

线程或系统

WH_DEBUG

9

是否执行其它HookHook

线程或系统

WH_FOREGROUNDIDLE

11

前台程序空闲

线程或系统

WH_GETMESSAGE

3

投放至消息队列中的消息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VB编程可以通过使用USB编程实现与USB设备的通信。以下是一个基础的示例: 首先,需要导入与USB通信相关的库。 ```vb Imports System Imports System.Management Imports System.IO.Ports ``` 然后,获取连接到计算机上的USB设备列表。 ```vb Dim devices As List(Of ManagementObject) = New List(Of ManagementObject)() Dim query As String = "SELECT * FROM Win32_PnPEntity WHERE Name LIKE '%(COM%'" Dim searcher As ManagementObjectSearcher = New ManagementObjectSearcher(query) For Each device As ManagementObject In searcher.Get() devices.Add(device) Next ``` 接下来,选择要与之通信的USB设备,并打开相应的串口。 ```vb Dim selectedDevice As ManagementObject = devices(0) ' 假设选择第一个设备 Dim portName As String = selectedDevice.Properties("Name").Value.ToString().Split(" ")[1] Dim baudRate As Integer = 9600 ' 设置波特率为9600 Dim serialPort As SerialPort = New SerialPort(portName, baudRate) serialPort.Open() ``` 现在,可以发送和接收数据。 ```vb Dim sendBytes As Byte() = { 1, 2, 3 } ' 假设要发送的数据 serialPort.Write(sendBytes, 0, sendBytes.Length) Dim receiveBytes(255) As Byte ' 假设要接收的数据长度不超过255 Dim bytesRead As Integer = serialPort.Read(receiveBytes, 0, receiveBytes.Length) Dim receiveData(bytesRead - 1) As Byte Array.Copy(receiveBytes, 0, receiveData, 0, bytesRead) ``` 最后,记得在程序结束时关闭串口。 ```vb serialPort.Close() ``` 这就是使用VB编程实现与USB通信的基本步骤。根据具体的需求和USB设备的特性,可能需要添加更多的代码来处理数据的解析和其他操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值