是这样的:
有一个程序,我不知道它是用何种语言\工具开发的,它的运行界面上有一个按钮,该按钮显示文字是:Abort。
  我用VB写的程序中需要用到让鼠标去打击上面提到的按钮,当然还可能是双击、右击等,请问这如何实现?VB实现容易吗?或者其它VC等可以吗?
  另:如何在VB中让鼠标在屏幕的某一个位置(以坐标表示)单击或双击?
  对此我没有任何经验,请高手赐教,谢谢!

解决方案 »

  1.   

    主要思路是用API函数获取某个窗体中某个按钮的句柄,向它传送特定消息另外的,也是用API函数调整鼠标指针的位置,再让它单击,这个我在VB下做过
      

  2.   

    这不是一个你认为很难的问题
    新建一标准工程,添加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中输入你数标需要移动并点击的坐标.
      

  3.   

    楼上的说法不是很正确
    因为程序启动的时候坐标不是一定的
    以前曾经有过一个点击winzip启动时候出现的版权按钮的程序那个才是正途他是获取按钮句柄然后sendmessage来完成的
      

  4.   

    更正:上面代码有点错误,应为新建一标准工程,添加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 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
      

  5.   

    如果每次程序启动时Abort按钮都不一样,那么你可通过将数标移动到该按钮的位置上,通过Label3,Label4中显示的坐标,再输入到text1,text2文本框中,再点击command1运行即可.aspower大哥,再帮我看下我的帖啊,还是报错没能成功.