VB mouse_event 模拟鼠标移动问题 帮忙找错!
'模块中.....OptionExplicitDeclareFunctionGetCursorPosLib"user32"(lpPointAsPOINTAPI)AsLon...
'模块中.....
Option Explicit
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
Y As Long
End Type
Public Function 光标位置() As POINTAPI
GetCursorPos 光标位置
End Function
Public Function getmouse_x_y() As POINTAPI
GetCursorPos getmouse_x_y
End Function
'窗体中....
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)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
'Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Label1 = "0"
Sleep 1000
Label1 = "到计时 5 "
DoEvents
Sleep 1000
Label1 = "到计时 4 "
DoEvents
Sleep 1000
Label1 = "到计时 3 "
DoEvents
Sleep 1000
Label1 = "到计时 2 "
DoEvents
Sleep 1000
Label1 = "到计时 1 "
DoEvents
Sleep 1000
Label1 = "按键发送 "
DoEvents
Sleep 1000
----问题地点---
'方法一 mouse_event MOUSEEVENTF_MOVE, 100, 0, 0, 0
'方法二 mouse_event MOUSEEVENTF_MOVE, 100 * 65535 / 1024, 0, 0, 0 ’当前分辨率为1024X768
'点击 Command1 然后把鼠标放在桌面左上角0 x 0 位置,5秒以后移动地点并非100 x 0位置,我错在那里了?
Timer1.Interval = 50
End Sub
Private Sub Timer1_Timer()
Label1 = 光标位置.x & " X " & 光标位置.Y
End Sub
方法一,方法二都不行,我想让鼠标移动到100x0位置上边。
运行后:方法一会移动到150点左右,方法二会移动到1024x0的位置上,还是被限制过的那种。
VB版本为6.0 展开
Option Explicit
Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Type POINTAPI
x As Long
Y As Long
End Type
Public Function 光标位置() As POINTAPI
GetCursorPos 光标位置
End Function
Public Function getmouse_x_y() As POINTAPI
GetCursorPos getmouse_x_y
End Function
'窗体中....
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)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
'Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Command1_Click()
Label1 = "0"
Sleep 1000
Label1 = "到计时 5 "
DoEvents
Sleep 1000
Label1 = "到计时 4 "
DoEvents
Sleep 1000
Label1 = "到计时 3 "
DoEvents
Sleep 1000
Label1 = "到计时 2 "
DoEvents
Sleep 1000
Label1 = "到计时 1 "
DoEvents
Sleep 1000
Label1 = "按键发送 "
DoEvents
Sleep 1000
----问题地点---
'方法一 mouse_event MOUSEEVENTF_MOVE, 100, 0, 0, 0
'方法二 mouse_event MOUSEEVENTF_MOVE, 100 * 65535 / 1024, 0, 0, 0 ’当前分辨率为1024X768
'点击 Command1 然后把鼠标放在桌面左上角0 x 0 位置,5秒以后移动地点并非100 x 0位置,我错在那里了?
Timer1.Interval = 50
End Sub
Private Sub Timer1_Timer()
Label1 = 光标位置.x & " X " & 光标位置.Y
End Sub
方法一,方法二都不行,我想让鼠标移动到100x0位置上边。
运行后:方法一会移动到150点左右,方法二会移动到1024x0的位置上,还是被限制过的那种。
VB版本为6.0 展开
1个回答
展开全部
mouse_event MOUSEEVENTF_MOVE + MOUSEEVENTF_ABSOLUTE, Me.ScaleX(100, 3, 1) * 65535 / Screen.Width, 0, 0, 0
解释:
MOUSEEVENTF_ABSOLUTE 是让鼠标指针按绝对位置移动。如果是相对移动,则实际的移动位置要受控制面板中对鼠标指针移动速度及移动精度的影响,也就是说,在不同的电脑上,鼠标指针相对移动后的位置很可能会出现截然不同的情况,所以最好不要用相对移动,改用绝对移动。
Me.ScaleX(100, 3, 1)是把100像素转为缇(Twip)
Screen.Width是屏幕的横向分辨率(单位是缇),这样就使程序适应所有显示器
解释:
MOUSEEVENTF_ABSOLUTE 是让鼠标指针按绝对位置移动。如果是相对移动,则实际的移动位置要受控制面板中对鼠标指针移动速度及移动精度的影响,也就是说,在不同的电脑上,鼠标指针相对移动后的位置很可能会出现截然不同的情况,所以最好不要用相对移动,改用绝对移动。
Me.ScaleX(100, 3, 1)是把100像素转为缇(Twip)
Screen.Width是屏幕的横向分辨率(单位是缇),这样就使程序适应所有显示器
追问
貌似不行啊!
只要有 MOUSEEVENTF_MOVE 之后无论是OR 还是 + 时,鼠标都不会移动,只有与点击相关的OR才起作用!
我还测试了下MOUSEEVENTF_MOVE + MOUSEEVENTF_ABSOLUTE
a 在VB6.0环境下鼠标死活不移动,好向还包括移动时的点击。
b 但是在Microsoft Visual Studio 2008 中的Basic环境下到鼠标到是可以移动!
追答
我是测试通过后(VB6)才把代码发上来的,不知道你是怎么回事
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询