找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5774|回复: 4

用自己的意识去“遥控”鼠标

[复制链接]

1214

主题

352

回帖

11

精华

管理员

菜鸟

积分
93755

贡献奖关注奖人气王精英奖乐于助人勋章

发表于 2007-3-7 20:53:21 | 显示全部楼层 |阅读模式
就是这么一段过程,明白了吧,下面我们就开始做准备工作吧。首先,我们应该认识在以下程序中要用到的几个API函数,这几个函数,也就是程序的关键所在了: <br/>1 GetCursorPos 获取鼠标指针在屏幕位置的函数。 <br/>2 SetCursorPos 移动鼠标指针函数,其参数X,Y指定了鼠标指针在屏幕上的坐标,GetCursorPos函数把鼠标指针当前位置存到了变量lpPoint中。 <br/>Private Type POINTAPI <br/>X As Long <br/>Y As Long <br/>End Type <br/>3 ClientToScreen 坐标平移变换函数,引入该函数就是为了取得我们目标按钮控件中心相对于屏幕坐标系的坐标位置。 <br/>4 SendMessage 向目标按钮发送执行鼠标左键按下和放开命令的函数,其中设置wMsg参数的取值分别为:WM_LBUTTONDOWN 和 WM_LBUTTONUP。 <br/>5 GetTickCount 延时函数,获取Windows启动至被调用时所经过的毫秒数。 <br/>然后在窗体中放置两个按钮控件与一个文本控件,再利用VB中的菜单编辑器完成一个热键为Alt-A的菜单。完成后就可以编写代码了: <br/>先利用API查看器写下如下API声明: <br/>Private Type POINTAPI <br/>x As Long <br/>y As Long <br/>End Type <br/>&nbsp;<br/>Dim Buttonpos As POINTAPI <br/>&nbsp;<br/>Const WM_LBUTTONDOWN = &amp;H201 <br/>Const WM_LBUTTONUP = &amp;H202 <br/>&nbsp;<br/>Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long <br/>Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long <br/>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 <br/>Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long <br/>Private Declare Function GetTickCount Lib "kernel32" () As Long <br/>&nbsp;<br/>在程序运行时,我们首先要知道目标按钮控件相对于屏幕的坐标,所以在窗体运行时就应该执行如下的代码: <br/>Private Sub Form_Load() <br/>Text1.Text = "按Alt-A组合键开始演示" <br/>Dim tmp As Long <br/>With Command1 <br/>Buttonpos.x = (.Left + .Width / 2) / Screen.TwipsPerPixelX <br/>Buttonpos.y = (.Top + .Height / 2) / Screen.TwipsPerPixelY <br/>End With <br/>tmp = ClientToScreen(Me.hwnd, Buttonpos) <br/>End Sub <br/>&nbsp;<br/>在本程序运行时,我们要遥控我们的鼠标,所以,我们通过键盘的快截键Alt-A激活菜单Clickbutton的Click事件进行鼠标指针的移动及单击左键运动: <br/>Private Sub numyanshi_Click() <br/>Dim Cursorpos As POINTAPI <br/>Dim DistX As Double, DistY As Double <br/>Dim tmp As Long <br/>Dim i As Long <br/>Dim PosX As Integer, PosY As Integer <br/>Dim TickCount As Long <br/>tmp = GetCursorPos(Cursorpos) <br/>DistX = Buttonpos.x - Cursorpos.x <br/>DistY = Buttonpos.y - Cursorpos.y <br/>For i = 1 To 40000'解释:数值越大,鼠标运动越慢,相应的执行时间也就越长。  <br/>PosX = Cursorpos.x + DistX * i / 40000 <br/>PosY = Cursorpos.y + DistY * i / 40000 <br/>tmp = SetCursorPos(PosX, PosY) <br/>Next i <br/>tmp = SendMessage(Command1.hwnd, WM_LBUTTONDOWN, 0, 0) <br/>TickCount = GetTickCount() <br/>While GetTickCount() - TickCount &lt; 200 <br/>tmp = DoEvents() <br/>Wend <br/>tmp = SendMessage(Command1.hwnd, WM_LBUTTONUP, 0, 0) <br/>End Sub <br/>当按下组合键后,我们会见到鼠标指针慢慢的移动到Command1按钮即目标按钮上,并按下按钮: <br/>Private sub command1_Click() <br/>Beep <br/>text1.text="鼠标左键已经按下,演示完毕!" <br/>End sub <br/>单击Command2按钮退出程序: <br/>Private sub command2_Click() <br/>Unload Me <br/>End sub
[此贴子已经被作者于2007-3-7 20:57:51编辑过]
【VB】QQ群:1422505加的请打上VB好友
【易语言】QQ群:9531809  或 177048
【FOXPRO】QQ群:6580324  或 33659603
【C/C++/VC】QQ群:3777552
【NiceBasic】QQ群:3703755

275

主题

3019

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17066

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2007-3-14 14:38:52 | 显示全部楼层
哈哈,这个程序有意思
我就是嗷嗷叫的老马了......

0

主题

2

回帖

0

精华

初来乍到

积分
284
QQ
发表于 2008-6-29 06:42:46 | 显示全部楼层

顶一个吧

既然看了,顶一个吧,好帖子

----------------------------------------------------------
个性签名:我爱笑....We provide all WoW Gold services. You can buy Cheap wow gold here! Welcome to our website for you World of Warcraft Gold,wow gold,Cheap World of Warcraft Gold,buy cheap wow gold, real WoW Power Leveling.......WoW Power Leveling,.. .

0

主题

2

回帖

0

精华

初来乍到

积分
296
发表于 2009-2-21 09:38:30 | 显示全部楼层
<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<div id="textstyle_2" style="FONT-SIZE: 9pt; OVERFLOW: hidden; WORD-BREAK: break-all; TEXT-INDENT: 24px; WORD-WRAP: break-word">收藏了,谢谢。</div></td></tr></tbody></table>

0

主题

1

回帖

0

精华

初来乍到

积分
248
发表于 2009-2-26 10:27:10 | 显示全部楼层
顶一个?
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表