使用API函数【VB声明】 Private 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)【说明】 模拟一次鼠标事件 【备注】 进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度【参数表】 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函数可取得这个值。可用的值取决于特定的驱动程序使用到的鼠标消息: Public Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up Public Const MOUSEEVENTF_MOVE = &H1 ' mouse move Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up
那为什么不用setCursorPos?一个很简单的用键盘模拟鼠标移动例子: 建一个窗口,只放一个label。然后 模块中: Option ExplicitDeclare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public Type POINTAPI x As Long y As Long End Type程序中: Private Sub Form_KeyPress(KeyAscii As Integer) Print KeyAscii Dim k As POINTAPI, re As Long, x As Long, y As Long re = GetCursorPos(k) x = k.x y = k.y If KeyAscii = 49 Then x = x - 1 SetCursorPos x, y End IfIf KeyAscii = 50 Then y = y + 1 SetCursorPos x, y End IfIf KeyAscii = 51 Then x = x + 1 SetCursorPos x, y End If If KeyAscii = 53 Then y = y - 1 SetCursorPos x, y End If Label1.Caption = Str(KeyAscii) & "," & Str(x) & "," & Str(y) End Sub运行程序,用数字小键盘的1、2、3、5键就可以控制鼠标上下左右地跑。 至于模拟点击,看下一帖。。
'转载: '------------------------------------------- ' 模拟鼠标的左键单击和右键单击 '------------------------------------------- ' 洪恩在线 求知无限 '------------------------------------------- '程序说明: '本例采用API函数实现模拟的鼠标事件,程序运行后会 '产生十分有趣的效果。也来试一试。 '本例中只使用了相对鼠标坐标,我们也可以使用绝对 '鼠标坐标来试一试。 '-------------------------------------------'【VB声明】 ' 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)'【说明】 ' 模拟一次鼠标事件'【备注】 ' 进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度'【参数表】 ' 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函数可取得这个值。可用的值取决于特定的驱动程序 Option Explicit 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 _ )'Option_Tag标示选择了哪一种模拟事件 Dim Option_Tag As Integer 'OnTest标示是否处于模拟状态,以便我们停止模拟 Dim OnTest As Boolean '对API变量的定义 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()'如果不处于模拟状态 If OnTest = False Then Command1.Caption = "快停下来吧" Timer1.Enabled = True OnTest = True '如果处于模拟状态 Else Command1.Caption = "试一试" Timer1.Enabled = False OnTest = False End If End Sub'窗体加载时一些变量需要设置 Private Sub Form_Load() Option_Tag = 1 Timer1.Enabled = False OnTest = False End Sub'选择了模拟“鼠标左键单击事件” Private Sub Option1_Click() Option_Tag = 1 '左键单击事件 Option2.Value = False Option3.Value = False End Sub'选择了模拟“鼠标右键单击事件” Private Sub Option2_Click() Option_Tag = 2 '右键单击事件 Option1.Value = False Option3.Value = False End Sub'选择了模拟“鼠标双击事件” Private Sub Option3_Click() Option_Tag = 3 '双击事件 Option1.Value = False Option2.Value = False End Sub'每隔一秒中模拟一次鼠标事件 Private Sub Timer1_Timer() If Option_Tag = 1 Then '调用了mouse_event函数,其参数的设置见前面说明 '如果同时要模拟两个鼠标事件,可以用 Or 将两个参数连接 '这里是 鼠标左键按下 和松开两个事件的组合即一次单击 mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ElseIf Option_Tag = 2 Then '模拟鼠标右键单击事件 mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 Else '两次连续的鼠标左键单击事件 构成一次鼠标双击事件 mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 End If End Sub
Private 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)【说明】
模拟一次鼠标事件 【备注】
进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度【参数表】
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函数可取得这个值。可用的值取决于特定的驱动程序使用到的鼠标消息:
Public Const MOUSEEVENTF_ABSOLUTE = &H8000 ' absolute move
Public Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Public Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20 ' middle button down
Public Const MOUSEEVENTF_MIDDLEUP = &H40 ' middle button up
Public Const MOUSEEVENTF_MOVE = &H1 ' mouse move
Public Const MOUSEEVENTF_RIGHTDOWN = &H8 ' right button down
Public Const MOUSEEVENTF_RIGHTUP = &H10 ' right button up
建一个窗口,只放一个label。然后
模块中:
Option ExplicitDeclare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Type POINTAPI
x As Long
y As Long
End Type程序中:
Private Sub Form_KeyPress(KeyAscii As Integer)
Print KeyAscii
Dim k As POINTAPI, re As Long, x As Long, y As Long
re = GetCursorPos(k)
x = k.x
y = k.y
If KeyAscii = 49 Then
x = x - 1
SetCursorPos x, y
End IfIf KeyAscii = 50 Then
y = y + 1
SetCursorPos x, y
End IfIf KeyAscii = 51 Then
x = x + 1
SetCursorPos x, y
End If
If KeyAscii = 53 Then
y = y - 1
SetCursorPos x, y
End If
Label1.Caption = Str(KeyAscii) & "," & Str(x) & "," & Str(y)
End Sub运行程序,用数字小键盘的1、2、3、5键就可以控制鼠标上下左右地跑。
至于模拟点击,看下一帖。。
'-------------------------------------------
' 模拟鼠标的左键单击和右键单击
'-------------------------------------------
' 洪恩在线 求知无限
'-------------------------------------------
'程序说明:
'本例采用API函数实现模拟的鼠标事件,程序运行后会
'产生十分有趣的效果。也来试一试。
'本例中只使用了相对鼠标坐标,我们也可以使用绝对
'鼠标坐标来试一试。
'-------------------------------------------'【VB声明】
' 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)'【说明】
' 模拟一次鼠标事件'【备注】
' 进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度'【参数表】
' 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函数可取得这个值。可用的值取决于特定的驱动程序
Option Explicit
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 _
)'Option_Tag标示选择了哪一种模拟事件
Dim Option_Tag As Integer
'OnTest标示是否处于模拟状态,以便我们停止模拟
Dim OnTest As Boolean
'对API变量的定义
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()'如果不处于模拟状态
If OnTest = False Then
Command1.Caption = "快停下来吧"
Timer1.Enabled = True
OnTest = True
'如果处于模拟状态
Else
Command1.Caption = "试一试"
Timer1.Enabled = False
OnTest = False
End If
End Sub'窗体加载时一些变量需要设置
Private Sub Form_Load()
Option_Tag = 1
Timer1.Enabled = False
OnTest = False
End Sub'选择了模拟“鼠标左键单击事件”
Private Sub Option1_Click()
Option_Tag = 1 '左键单击事件
Option2.Value = False
Option3.Value = False
End Sub'选择了模拟“鼠标右键单击事件”
Private Sub Option2_Click()
Option_Tag = 2 '右键单击事件
Option1.Value = False
Option3.Value = False
End Sub'选择了模拟“鼠标双击事件”
Private Sub Option3_Click()
Option_Tag = 3 '双击事件
Option1.Value = False
Option2.Value = False
End Sub'每隔一秒中模拟一次鼠标事件
Private Sub Timer1_Timer()
If Option_Tag = 1 Then
'调用了mouse_event函数,其参数的设置见前面说明
'如果同时要模拟两个鼠标事件,可以用 Or 将两个参数连接
'这里是 鼠标左键按下 和松开两个事件的组合即一次单击
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
ElseIf Option_Tag = 2 Then
'模拟鼠标右键单击事件
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
Else
'两次连续的鼠标左键单击事件 构成一次鼠标双击事件
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End If
End Sub