如何编个程序,在运行另一个程序时,控制鼠标如:移动,按下等操作!!

解决方案 »

  1.   

    移动用 
    Private Declare Function SetCursorPos Lib "user32" Alias "SetCursorPos" (ByVal x As Long, ByVal y As Long) As Long鼠标按下用
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    SendMessage lWnd, &H201, 0&, 0&'鼠标按下
    SendMessage lWnd, &H202, 0&, 0&   '鼠标释放
      

  2.   

    mouse_event VB声明 
    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) 
    说明 
    模拟一次鼠标事件 
    参数表 
    参数 类型及说明 
    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函数可取得这个值。可用的值取决于特定的驱动程序 
    注解 
    进行相对运动的时候,由SystemParametersInfo函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度
     
      

  3.   

    别人的代码,整理了一下:
    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    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)
    Public Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4Public Type POINTAPI
            X As Long
            Y As Long
    End TypePrivate Sub Command1_Click()
        Dim i   As Long
        For i = 1 To 700 Step 3
            SetCursorPos i, 300
            Sleep 1
        Next
        
    End SubPrivate Sub Command2_Click()
        Dim i As Long
        Dim X As Long
        Dim Y As Long
        
        X = 400
        Y = 300
        
        For i = 1 To 800 Step 3
            If X > 10 Then X = X - 3
            If Y < 585 Then Y = Y + 3        SetCursorPos X, Y
            Sleep 5
        Next
        
        SetCursorPos 10, 585
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        Sleep 5
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
        
    End Sub
      

  4.   

    上面的有一点问题:
    Option Explicit
    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    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 SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4Private Type POINTAPI
            X As Long
            Y As Long
    End TypePrivate Sub Command1_Click()
        Dim i   As Long
        For i = 1 To 700 Step 3
            SetCursorPos i, 300
            Sleep 1
        Next
        
    End SubPrivate Sub Command2_Click()
        Dim i As Long
        Dim X As Long
        Dim Y As Long
        
        X = 400
        Y = 300
        
        For i = 1 To 800 Step 3
            If X > 10 Then X = X - 3
            If Y < 585 Then Y = Y + 3        SetCursorPos X, Y
            Sleep 5
        Next
        
        SetCursorPos 10, 585
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        Sleep 5
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
        
    End Sub