VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > vb >
  • vb教程之用自己的意识去“遥控”鼠标

遥远  

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

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )


相关教程