VB模拟鼠标键盘动作(转) |
您所在的位置:网站首页 › 模拟鼠标键盘动作 › VB模拟鼠标键盘动作(转) |
VB 模拟鼠标键盘动作 ( 转 ) 2011-03-31 15:16 来自网址:
http://apps.hi.baidu.com/share/detail/16221474 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
表示一个普通键被按下
WM_KEYUP
表示一个普通键被释放
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |