当前位置: 网学 > 编程文档 > VB > 正文

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

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/17
下载{$ArticleTitle}原创论文样式

遥远  

所谓"用意识去遥控鼠标"就是在特定的环境下,通过某种命令,让无论在哪里的鼠标指针都会乖乖的回到你指定的区域里,并执行相应的动作。当然,这一切虽然都是按你的意识去做但绝不会是你自己用手来控制鼠标完成的。说了这些大家可能迷糊了,其实这只是一种遥控鼠标的技术,在很多流行的电脑教学软件中常会应用到此技术,比如在软件中进行某种讲解时,里面的鼠标指针不通过鼠标器指令也会伴随着讲解来执行一步一步的动作。这下大家明白了吧,其实在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)

  • 上一篇资讯: Modem通讯意外处理
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号