高分求教功能设想:
1、记录需要点击鼠标的坐标;
2、程序自动将鼠标移到需要点击鼠标的位置;
3、点击鼠标,如果是输入框,还需要自动输入相应数据。难点:
无法实现点击鼠标的动作。代码:
Private Type POINTAPI
X As Long
Y As Long
End Type
Const WM_LBUTTONDOWN = &H201
Const WM_LBUTTONUP = &H202
Dim ButtonPos As POINTAPI
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 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByValhwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Command1_Click()
    Dim tmp As Long
    tmp = GetCursorPos(ButtonPos) '记录坐标,可能是当前窗口,也可能是别的程序窗口。
    Beep '发音,检验是否点击了
End Sub
Private Sub Command2_Click()
    Dim tmp As Long
    tmp = SetCursorPos(ButtonPos.X, ButtonPos.Y) '定位鼠标
    tmp = SendMessage(Nohwnd, WM_LBUTTONDOWN, 0, 0) '按下
    tmp = SendMessage(Nohwnd, WM_LBUTTONUP, 0, 0) '松开
End Sub

解决方案 »

  1.   

    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 )    mouse_event &H2, 0, 0, 0, 0
        mouse_event &H4, 0, 0, 0, 0
      

  2.   

    鼠标的点击等可以用mouse_event函数Public 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 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 upPublic Sub MC(X As Long, Y As Long)
    '鼠标点击
        mouse_event MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, X * 64, Int(Y / Screen.Height * 65535), 0, 0
        
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        DoEvents
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0    Debug.Print X, Y
    End Sub
      

  3.   

    Private Type POINTAPI
    X As Long
    Y As Long
    End Type
    Const WM_LBUTTONDOWN = &H201
    Const WM_LBUTTONUP = &H202
    Dim ButtonPos As POINTAPI
    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 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByValhwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Private Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    Private Sub Command1_Click()
        Dim tmp As Long
        tmp = GetCursorPos(ButtonPos) '记录坐标,可能是当前窗口,也可能是别的程序窗口。
        Beep '发音,检验是否点击了
    End Sub
    Private Sub Command2_Click()
        Dim tmp As Long
        tmp = SetCursorPos(ButtonPos.X, ButtonPos.Y) '定位鼠标
        mouse_event &H2, 0, 0, 0, 0
        mouse_event &H4, 0, 0, 0, 0'    tmp = SendMessage(Nohwnd, WM_LBUTTONDOWN, 0, 0) '按下
    '    tmp = SendMessage(Nohwnd, WM_LBUTTONUP, 0, 0) '松开
    End Sub
      

  4.   

    谢谢上面几位大哥帮忙。
    用mouse_evern及keydb_evern两个API总算会啦。
    但总觉得不是很好。
    因为:如果在软件操作过程中,人为地点击了鼠标可改变了焦点程序,就无法达到预定效果了。
    还是觉得
    捕捉窗體的句柄啊,然後是控件的句柄,再就是向控件發送消息
    这种方法好些。
    还请哥们帮帮忙。给个例子看看。
    如:某程序启动时有三个步步骤,每个步骤都要输入两项信息,然后选择“下一步”或“上一步”到完成。如何做到自动输入相应数据并按相应按钮?(如何捕捉用户名输入框句柄?口令输入框句柄?如何区分目标按钮?)
    为了解决这个问题,我现再加100分。共计200分。
    盼哥们帮帮忙,不胜感谢。