移动用 Private Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (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, ByVal lParam As Long) As Long SendMessage lWnd, &H201, 0&, 0&'鼠标按下 SendMessage lWnd, &H202, 0&, 0& '鼠标释放
mouse_event VB声明 Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) 说明 模拟一次鼠标事件 参数表 参数 类型及说明 dwFlags Long,下述标志的一个组合 MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元 MOUSEEVENTF_MOVE 移动鼠标 MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下 MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起 MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下 MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下 MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下 MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下 dx Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动 dy Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动 cButtons Long,未使用 dwExtraInfo Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序 注解 进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度
别人的代码,整理了一下: Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds 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) Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Const MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4Public Type POINTAPI X As Long Y As Long End TypePrivate Sub Command1_Click() Dim i As Long For i = 1 To 700 Step 3 SetCursorPos i, 300 Sleep 1 Next
End SubPrivate Sub Command2_Click() Dim i As Long Dim X As Long Dim Y As Long
X = 400 Y = 300
For i = 1 To 800 Step 3 If X > 10 Then X = X - 3 If Y < 585 Then Y = Y + 3 SetCursorPos X, Y Sleep 5 Next
上面的有一点问题: Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds 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 SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Const MOUSEEVENTF_LEFTDOWN = &H2 Private Const MOUSEEVENTF_LEFTUP = &H4Private Type POINTAPI X As Long Y As Long End TypePrivate Sub Command1_Click() Dim i As Long For i = 1 To 700 Step 3 SetCursorPos i, 300 Sleep 1 Next
End SubPrivate Sub Command2_Click() Dim i As Long Dim X As Long Dim Y As Long
X = 400 Y = 300
For i = 1 To 800 Step 3 If X > 10 Then X = X - 3 If Y < 585 Then Y = Y + 3 SetCursorPos X, Y Sleep 5 Next
Private Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (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, ByVal lParam As Long) As Long
SendMessage lWnd, &H201, 0&, 0&'鼠标按下
SendMessage lWnd, &H202, 0&, 0& '鼠标释放
Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
说明
模拟一次鼠标事件
参数表
参数 类型及说明
dwFlags Long,下述标志的一个组合
MOUSEEVENTF_ABSOLUTE dx和dy指定鼠标坐标系统中的一个绝对位置。在鼠标坐标系统中,屏幕在水平和垂直方向上均匀分割成65535×65535个单元
MOUSEEVENTF_MOVE 移动鼠标
MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下
MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起
MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下
MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下
MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下
MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下
dx Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定水平方向的绝对位置或相对运动
dy Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直方向的绝对位置或相对运动
cButtons Long,未使用
dwExtraInfo Long,通常未用的一个值。用GetMessageExtraInfo函数可取得这个值。可用的值取决于特定的驱动程序
注解
进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds 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)
Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4Public Type POINTAPI
X As Long
Y As Long
End TypePrivate Sub Command1_Click()
Dim i As Long
For i = 1 To 700 Step 3
SetCursorPos i, 300
Sleep 1
Next
End SubPrivate Sub Command2_Click()
Dim i As Long
Dim X As Long
Dim Y As Long
X = 400
Y = 300
For i = 1 To 800 Step 3
If X > 10 Then X = X - 3
If Y < 585 Then Y = Y + 3 SetCursorPos X, Y
Sleep 5
Next
SetCursorPos 10, 585
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 5
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds 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 SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4Private Type POINTAPI
X As Long
Y As Long
End TypePrivate Sub Command1_Click()
Dim i As Long
For i = 1 To 700 Step 3
SetCursorPos i, 300
Sleep 1
Next
End SubPrivate Sub Command2_Click()
Dim i As Long
Dim X As Long
Dim Y As Long
X = 400
Y = 300
For i = 1 To 800 Step 3
If X > 10 Then X = X - 3
If Y < 585 Then Y = Y + 3 SetCursorPos X, Y
Sleep 5
Next
SetCursorPos 10, 585
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
Sleep 5
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub