感谢您进来看我的问题:谢谢!!我想要写一个程序控制鼠标的,就是由程序自己定时(比如10秒钟)就自动移动鼠标到IE当前窗口的某个位置(X,Y)上的“两个按钮”或者“两个图片”,然后执行“点击”功能,要怎么实现这个功能?谢谢ING我没有什么分了,只有几十分了。

解决方案 »

  1.   

    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 Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4
    Private Declare Function SetCursorPos Lib "user32" (ByVal X As Long, ByVal Y As Long) As Long
    '设置鼠标的位置为200,300
    SetCursorPos 200,300
    '模拟单击操作。
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
      

  2.   

    谢谢楼上的,不过你写的这个是没有窗口的,我想实现的是运行程序时就在窗口上显示可以输入按钮所在位置的坐标(x,y)的方框,然后由方框里给出的坐标执行鼠标移动的路线。例如:[A] [B]  ‘A和B为网页上的两个按钮位置运行程序,在程序主窗口的TEXT中输入坐标,10秒钟鼠标自动移动到A点,再过10秒钟,鼠标自动移动到B点。如此循环下去,直到用户点暂停按钮停止此循环。如果能加个当用户鼠标移动到A和B点位置时给出坐标(x,y)的代码更好。这样可以方便用户输入A和B点位置的坐标到TEXT中。能给出以上功能的完整代码吗?谢谢!!!感谢!!!
      

  3.   

    模拟一次鼠标事件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函数规定的系统鼠标轨迹速度会应用于鼠标运行的速度
     
      

  4.   

    'Before you start this program, I suggest you save everything that wasn't saved yet.
    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
    Const MOUSEEVENTF_ABSOLUTE = &H8000
    Const MOUSEEVENTF_RIGHTDOWN = &H8
    Const MOUSEEVENTF_RIGHTUP = &H10
    Private Sub Form_Activate()    Do
            'Simulate a mouseclick on the cursor's position
            mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI
            DoEvents
        Loop
    End Sub
      

  5.   

    你在程序窗口加四个textbox,用来让用户输入A、B按钮的X、Y坐标,然后用上面 boywang(大力水手)的方法,只是把SetCursorPos 200,300改成
    SetCursorPos val(text1.text),val(text2.text)过十秒再
    SetCursorPos val(text3.text),val(text4.text)
    .
    .
    如此不断循环。
      

  6.   

    加个定时器,interval设为10000再加一个全局变量i。Dim i As BooleanPrivate Sub Timer1_Timer()
    If i Then
    SetCursorPos Val(text1.Text), Val(text2.Text)
    Else
    SetCursorPos Val(text3.Text), Val(text4.Text)
    End If
    i = Not i
    End Sub
      

  7.   

    这个代码里面的
    Else
    SetCursorPos Val(text3.Text), Val(text4.Text)
    好象起不了作用不能实现10秒钟实现一次SetCursorPos Val(text1.Text), Val(text2.Text)再过10秒钟又实现一次SetCursorPos Val(text3.Text), Val(text4.Text)
      

  8.   

    可以啊在我机子里测试通过你看看下面几个地方:
    1.把boywang(大力水手)的api声明写到一个独立的模块中,并把它每句前面的private去掉。
    2.变量i的声明必须是全局级的。并注意你的程序中会不会有其他地方改变了i的值。
    3.可把timer1的interval调小一点,例如设为2000,即两秒,就不必等这么长时间了。
      

  9.   

    谢谢lsftest() 问题解决了,感谢你真诚的回答。感谢