下边的代码演示了模拟鼠标移动和单击,遗憾的是不能单击程序外的窗口。
请先声明以下API:mouse_event、GetCursorPos、SetCursorPos、ClientToScreen 还有POINTAPI Type,别忘了加上用到的常量。
向Form1添加加Command1和Command2。
代码如下:
Private Sub Command1_Click()
MsgBox "A Test"
End Sub
Private Sub Command2_Click()
Dim ButtonPos As POINTAPI
'窗口客户区坐标系与屏幕坐标系坐标原点不同,坐标单位(scale)也不同
'With里的代码把按钮Command1的中心在窗口客户区中的坐标单位转换为屏幕坐标系的单位
With Command1
ButtonPos.x = (.Left + .Width / 2) / Screen.TwipsPerPixelX
ButtonPos.y = (.Top + .Height / 2) / Screen.TwipsPerPixelY
End With
'还要通过函数ClientToScreen进行坐标平移变换,取得按钮中心在屏幕坐标系中的坐标位置
ClientToScreen hwnd, ButtonPos
'下边代码可以产生动态效果
Dim CursorPos As POINTAPI
Dim DistX As Double, DistY As Double
Dim Counter As Long, PosX As Long, PosY As Long
'GetCursorPos函数把鼠标光标的当前位置存到CursorPos中
GetCursorPos CursorPos
DistX = ButtonPos.x - CursorPos.x
DistY = ButtonPos.y - CursorPos.y
'CursorStep决定了鼠标移动的步长
Dim CursorStep As Long
CursorStep = 500
For Counter = 1 To CursorStep
PosX = CursorPos.x + DistX * Counter / CursorStep
PosY = CursorPos.y + DistY * Counter / CursorStep
'再用SetCursorPos函数设定了鼠标光标在屏幕上的位置
SetCursorPos PosX, PosY
Next Counter
'然后就可以单击了
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub