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 _
)
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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2Private Sub Command1_Click()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
( _
ByVal dwFlags As Long, _
ByVal dx As Long, _
ByVal dy As Long, _
ByVal cButtons As Long, _
ByVal dwExtraInfo 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 Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2Private Sub Command1_Click()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const MK_LBUTTON = &H1
Private Sub Command1_Click()
Dim lngFindWnd As Long
Dim x As Long 'x以相素为单位
Dim y As Long 'y以相素为单位
Dim xy As Long 'lParam,前4个字节为y座标,后4个字节为x座标
x = 5000/Screen.TwipsPerPixelX
y = 5000/Screen.TwipsPerPixelY
'lngFindWnd = FindWindow(...)
xy = y * 4 ^ 8 + x
PostMessage lngFindWnd, WM_LBUTTONDOWN, MK_LBUTTON, xy
End Sub
1。xy = y * 4 ^ 8 + x 这个公式 是怎么个换算 没想出来
2。.TwipsPerPixelX 是不是就是 分辨率 800*600?
3。 我换位sengMessage 同样可以 但是 返回0 难道0代表成功么?我不知道 现在发分后(结贴) 你还能不能回答 所以等你回了在发分(不是小气)
应该是 8位 16进指数吧
那么 800*600 就应该是h03200258 对么?
2. TwipsPerPixelX: 不同的操作系统可能不同
3. 我用的是Win2000,用sengMessage不行
Dim TempLng As Long
TempLng = (TempLng Or X) And &HFFFF
TempLng = TempLng Or (Y And &H7FFF) * &H10000
If Y And &H8000 Then TempLng = TempLng Or &H80000000
SendMouseMsg = SendMessage(hWnd, uMsg, Button, ByVal TempLng)
End Function
调用:
Debug.Print
Debug.Print SendMouseMsg(Command1.hWnd, WM_LBUTTONDOWN, MK_LBUTTON, 10, 10)
Debug.Print SendMouseMsg(Command1.hWnd, WM_LBUTTONUP, MK_LBUTTON, 10, 10)