'在VB窗體上添加兩個CommandButton,使用默認名稱,即可觀察測試效果
Private Type POINTAPI
X As Long
Y As Long
End Type
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hWnd As Long, lpPoint As POINTAPI) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
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
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Sub Command1_Click()
Dim Point0 As POINTAPI
Dim Point1 As POINTAPI
GetCursorPos Point0 '獲取當前鼠標坐標
Point1.X = 2 '指定偏移坐標X值,實際應用時視目標窗體而定
Point1.Y = 2 '指定偏移坐標Y值,實際應用時視目標窗體而定
'將偏移Command2的偏移坐標轉換成屏幕坐標
'實際應用時使用指定窗口的句柄
ClientToScreen Command2.hWnd, Point1
'將鼠標移動到轉換後的Point1坐標,即指定窗口的偏移坐標
SetCursorPos Point1.X, Point1.Y
'模擬鼠標左鍵Click動作
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&
'恢復原鼠標坐標
SetCursorPos Point0.X, Point0.Y
End Sub
Private Sub Command2_Click()
Debug.Print "Click"
End Sub