遥远
所谓"用意识去遥控鼠标"就是在特定的环境下,通过某种命令,让无论在哪里的鼠标指针都会乖乖的回到你指定的区域里,并执行相应的动作。当然,这一切虽然都是按你的意识去做但绝不会是你自己用手来控制鼠标完成的。说了这些大家可能迷糊了,其实这只是一种遥控鼠标的技术,在很多流行的电脑教学软件中常会应用到此技术,比如在软件中进行某种讲解时,里面的鼠标指针不通过鼠标器指令也会伴随着讲解来执行一步一步的动作。这下大家明白了吧,其实在Windows系统中,利用
API就可以轻松的实现上面的遥控鼠标过程!
下面我们就开始对上述过程通过一段程序进行讲解,我们这段程序的目的就是:通过按下键盘的一个组合键,鼠标指针缓慢的移动到指定的按钮上并自动按下相应的按钮来激发某种事件。
就是这么一段过程,明白了吧,下面我们就开始做准备工作吧。首先,我们应该认识在以下程序中要用到的几个API函数,这几个函数,也就是程序的关键所在了:
1 GetCursorPos 获取鼠标指针在屏幕位置的函数。
2 SetCursorPos 移动鼠标指针函数,其参数X,Y指定了鼠标指针在屏幕上的坐标,GetCursorPos函数把鼠标指针当前位置存到了变量lpPoint中。
Private Type POINTAPI
X As Long
Y As Long
End Type
3 ClientToScreen 坐标平移变换函数,引入该函数就是为了取得我们目标按钮控件中心相对于屏幕坐标系的坐标位置。
4 SendMessage 向目标按钮发送执行鼠标左键按下和放开命令的函数,其中设置wMsg参数的取值分别为:WM_LBUTTONDOWN 和 WM_LBUTTONUP。
5 GetTickCount 延时函数,获取Windows启动至被调用时所经过的毫秒数。
然后在窗体中放置两个按钮控件与一个文本控件,再利用VB中的菜单编辑器完成一个热键为Alt-A的菜单。完成后就可以编写代码了:
先利用API查看器写下如下API声明:
Private Type POINTAPI
x As Long
y As Long
End Type
Dim Buttonpos As POINTAPI
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
在程序运行时,我们首先要知道目标按钮控件相对于屏幕的坐标,所以在窗体运行时就应该执行如下的代码:
Private Sub Form_Load()
Text1.Text = "按Alt-A组合键开始演示"
Dim tmp As Long
With Command1
Buttonpos.x = (.Left + .Width / 2) / Screen.TwipsPerPixelX
Buttonpos.y = (.Top + .Height / 2) / Screen.TwipsPerPixelY
End With
tmp = ClientToScreen(Me.hwnd, Buttonpos)
End Sub
在本程序运行时,我们要遥控我们的鼠标,所以,我们通过键盘的快截键Alt-A激活菜单Clickbutton的Click事件进行鼠标指针的移动及单击左键运动:
Private Sub numyanshi_Click()
Dim Cursorpos As POINTAPI
Dim DistX As Double, DistY As Double
Dim tmp As Long
Dim i As Long
Dim PosX As Integer, PosY As Integer
Dim TickCount As Long
tmp = GetCursorPos(Cursorpos)
DistX = Buttonpos.x - Cursorpos.x
DistY = Buttonpos.y - Cursorpos.y
For i = 1 To 40000'解释:数值越大,鼠标运动越慢,相应的执行时间也就越长。
PosX = Cursorpos.x + DistX * i / 40000
PosY = Cursorpos.y + DistY * i / 40000
tmp = SetCursorPos(PosX, PosY)
Next i
tmp = SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0, 0)
TickCount = GetTickCount()
While GetTickCount() - TickCount < 200
tmp = DoEvents()
Wend
tmp = SendMessage(Command1.hwnd, WM_LBUTTONUP, 0, 0)
End Sub
当按下组合键后,我们会见到鼠标指针慢慢的移动到Command1按钮即目标按钮上,并按下按钮:
Private sub command1_Click()
Beep
text1.text="鼠标左键已经按下,演示完毕!"
End sub
单击Command2按钮退出程序:
Private sub command2_Click()
Unload Me
End sub
好了,以上程序完全完成了我们所期待的一段过程。在W98,VB6.0下调试通过,如果有任何问题欢迎与我联系。(email:mrdayuan@163.net)
-
vb教程之用自己的意识去“遥控”鼠标
本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比