就是这么一段过程,明白了吧,下面我们就开始做准备工作吧。首先,我们应该认识在以下程序中要用到的几个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/> <br/>Dim Buttonpos As POINTAPI <br/> <br/>Const WM_LBUTTONDOWN = &H201 <br/>Const WM_LBUTTONUP = &H202 <br/> <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/> <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/> <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 < 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编辑过] |