2024年4月15日发(作者:)

VB模拟鼠标键盘动作

有些时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代

替人们按键的方法,这样可以把很多重复性的键盘操作交给程序来模拟,省了很多精力,

按键精灵就是这样的一个软件。那么我们怎样才能用VB来写一个程序,达到与按键精灵

类似的功能呢?那就让我们来先了解一下windows中响应键盘事件的机制。

当用户按下键盘上的一个键时,键盘内的芯片会检测到这个动作,并把这个信号传送

到计算机。如何区别是哪一个键被按下了呢?键盘上的所有按键都有一个编码,称作键盘

扫描码。当你按下一个键时,这个键的扫描码就被传给系统。扫描码是跟具体的硬件相关

的,同一个键,在不同键盘上的扫描码有可能不同。键盘控制器就是将这个扫描码传给计

算机,然后交给键盘驱动程序。键盘驱动程序会完成相关的工作,并把这个扫描码转换为

键盘虚拟码。什么是虚拟码呢?因为扫描码与硬件相关,不具有通用性,为了统一键盘上

所有键的编码,于是就提出了虚拟码概念。无论什么键盘,同一个按键的虚拟码总是相同

的,这样程序就可以识别了。简单点说,虚拟码就是我们经常可以看到的像VK_A,VK_B

这样的常数,比如键A的虚拟码是65,写成16进制就是&H41,注意,人们经常用16

进制来表示虚拟码。当键盘驱动程序把扫描码转换为虚拟码后,会把这个键盘操作的扫描

码和虚拟码还有其它信息一起传递给操作系统。然后操作系统则会把这些信息封装在一个

消息中,并把这个键盘消息插入到消息列队。最后,要是不出意外的话,这个键盘消息最

终会被送到当前的活动窗口那里,活动窗口所在的应用程序接收到这个消息后,就知道键

盘上哪个键被按下,也就可以决定该作出什么响应给用户了。这个过程可以简单的如下表

示:

用户按下按键-----键盘驱动程序将此事件传递给操作系统-----操作系统将键盘事件

插入消息队列-----键盘消息被发送到当前活动窗口

明白了这个过程,我们就可以编程实现在其中的某个环节来模拟键盘操作了。在VB

中,有多种方法可以实现键盘模拟,我们就介绍几种比较典型的。

1.局部级模拟

从上面的流程可以看出,键盘事件是最终被送到活动窗口,然后才引起目标程序响

应的。那么最直接的模拟方法就是:直接伪造一个键盘消息发给目标程序。哈哈,这实在

是很简单,windows提供了几个这样的API函数可以实现直接向目标程序发送消息的功

能,常用的有SendMessage和PostMessage,它们的区别是PostMessage函数直接把

消息仍给目标程序就不管了,而SendMessage把消息发出去后,还要等待目标程序返回

些什么东西才好。这里要注意的是,模拟键盘消息一定要用PostMessage函数才好,用

SendMessage是不正确的(因为模拟键盘消息是不需要返回值的,不然目标程序会没反

应),切记切记!PostMessage函数的VB声明如下:

Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal

hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As

Long

参数hwnd 是你要发送消息的目标程序上某个控件的句柄,参数wMsg 是消息的类

型,表示你要发送什么样的消息,最后wParam 和lParam 这两个参数是随消息附加的数

据,具体内容要由消息决定。

再来看看wMsg 这个参数,要模拟按键就靠这个了。键盘消息常用的有如下几个:

WM_KEYDOWN 表示一个普通键被按下