是这样的:
有一个程序,我不知道它是用何种语言\工具开发的,它的运行界面上有一个按钮,该按钮显示文字是:Abort。
我用VB写的程序中需要用到让鼠标去打击上面提到的按钮,当然还可能是双击、右击等,请问这如何实现?VB实现容易吗?或者其它VC等可以吗?
另:如何在VB中让鼠标在屏幕的某一个位置(以坐标表示)单击或双击?
对此我没有任何经验,请高手赐教,谢谢!
有一个程序,我不知道它是用何种语言\工具开发的,它的运行界面上有一个按钮,该按钮显示文字是:Abort。
我用VB写的程序中需要用到让鼠标去打击上面提到的按钮,当然还可能是双击、右击等,请问这如何实现?VB实现容易吗?或者其它VC等可以吗?
另:如何在VB中让鼠标在屏幕的某一个位置(以坐标表示)单击或双击?
对此我没有任何经验,请高手赐教,谢谢!
解决方案 »
- 200分的帖子,速度来围观啊
- vb题:编写一个函数reversedigit(byval num as integer)。该函数将整数nun的每个位上的数字逆序排列后返回。
- rpcrt4.dll问题
- 如何获取text richtextbox 中光标前后的字符串?
- 散分!我是IOAS办公系统制作大师的作者,谁能帮我解决基本温饱问题?!
- 如何让窗体显示在最前面,并且要把开始这一栏给隐藏掉,还有要禁止鼠标箭头显示
- 怎样实现网页上的自动填表和按钮保存
- 关于VB与DELPHI接口的问题,请多指教
- 如何把一个文件改名。
- 求教 webbrowser怎么直接发送onclick???
- 怎样将Byte赋值给Picture
- 连接数据库错误!
新建一标准工程,添加command1,Timer1,text1,text2,Label1,Label2,Label3,Label4各一个,再添加如下代码:Option Explicit
'申明API函数
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
Private Type POINTAPI ' 声明数据类型
x As Long
y As Long
End Type
Dim z As POINTAPI ' 变量Private Sub CmdMove_Click()
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
MoveMouse Text1.Text, Text2.Text
'这里是 鼠标左键按下 和松开两个事件的组合即一次单击
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
'模拟鼠标右键单击事件
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
'两次连续的鼠标左键单击事件 构成一次鼠标双击事件
'mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
'mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0End SubPrivate Sub Command1_Click()
End
End SubPrivate Sub Command2_Click()
SetCursorPos 520, 104
End SubPrivate Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1Label1.Caption = "X坐标"
Label2.Caption = "Y坐标"
Text1.Text = "100" '这里输入你需要移动的x坐标
Text2.Text = "100" '这里输入你需要移动的x坐标
End Sub
Sub MoveMouse(x As Single, y As Single)
Dim pt As POINTAPI
pt.x = x
pt.y = y
'ClientToScreen hwnd, pt
SetCursorPos pt.x, pt.y
End SubPrivate Sub Timer1_Timer()
GetCursorPos z ' 获取坐标
Label3 = "x: " & z.x ' 显示 x 坐标
Label4 = "y: " & z.y ' 显示 y 坐标
End Sub运行前在text1和text2中输入你数标需要移动并点击的坐标.
因为程序启动的时候坐标不是一定的
以前曾经有过一个点击winzip启动时候出现的版权按钮的程序那个才是正途他是获取按钮句柄然后sendmessage来完成的
'申明API函数
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
Private Type POINTAPI ' 声明数据类型
x As Long
y As Long
End Type
Dim z As POINTAPI ' 变量Private Sub Command1_Click()
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
MoveMouse Text1.Text, Text2.Text
'这里是 鼠标左键按下 和松开两个事件的组合即一次单击
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
'模拟鼠标右键单击事件
mouse_event MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
'两次连续的鼠标左键单击事件 构成一次鼠标双击事件
'mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
'mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0End SubPrivate Sub Form_Load()
Timer1.Enabled = True
Timer1.Interval = 1Label1.Caption = "X坐标"
Label2.Caption = "Y坐标"
Text1.Text = "0" '这里输入你需要移动的x坐标
Text2.Text = "0" '这里输入你需要移动的x坐标
End Sub
Sub MoveMouse(x As Single, y As Single)
Dim pt As POINTAPI
pt.x = x
pt.y = y
'ClientToScreen hwnd, pt
SetCursorPos pt.x, pt.y
End SubPrivate Sub Timer1_Timer()
GetCursorPos z ' 获取坐标
Label3 = "x: " & z.x ' 显示 x 坐标
Label4 = "y: " & z.y ' 显示 y 坐标
End Sub