利用API函数模拟鼠标点击.有几个菜鸟级问题.
帮帮忙啊1.
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
这是单击左键的代码,后面的坐标有啥用啊?我改动了一下,好象没什么用...☆2.
mouse_event MOUSEEVENTF_MOVE, 0 , 0 , 0 , 0
这是移动鼠标的代码,后面那个坐标是相对于当前鼠标的位置的,好象VB应该是把屏幕 65535*65535 等分吧..为什么有4个坐标,而且只能相对于鼠标的当前位置移动,这是不是叫做"相对鼠标坐标"呢?那么"绝对鼠标坐标"应该怎么弄呢?而且怎么准确的找到自己想要的坐标呢?★3.
我是把动作都加到Timer控件里,然后利用开始按扭来控制Timer控件的,要想完成一连串的动作则需要好几个Timer.这也不是很大的问题..可是,还有个问题..举个例子来说明..
比如,我想要鼠标先移动到A点,然后双击左键.然后再移动到B点.
这就需要3个Timer控件.可是,设置完Timer控件的Interval属性之后,假设时间间隔设置的都没有问题..可是,每个Timer里的动作都会重复的运行,间隔时间少的动作就会出现N遍, 这样根本就达不到效果...请问怎么让所有的Timer里的动作都运行完毕之后再循环运行呢?谢谢大哥大姐们了...

解决方案 »

  1.   

    1、点击是在当前坐标,如果想移动必须先mouse_event MOUSEEVENTF_MOVE, dx , dy , 0 , 02、绝对坐标把屏幕分为65535*65535 
    而相对坐标是按照像素移动
    前两个参数是坐标,后两个参数是滚轮和其他信息3、这里用Sleep延迟就可以了,多个Timer的确很难协调Option Explicit
    Private Declare Sub mouse_event Lib "user32.dll" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
    Private Const MOUSEEVENTF_ABSOLUTE As Long = &H8000
    Private Const MOUSEEVENTF_LEFTDOWN As Long = &H2
    Private Const MOUSEEVENTF_LEFTUP As Long = &H4
    Private Const MOUSEEVENTF_MIDDLEDOWN As Long = &H20
    Private Const MOUSEEVENTF_MIDDLEUP As Long = &H40
    Private Const MOUSEEVENTF_MOVE As Long = &H1
    Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
    Private Const MOUSEEVENTF_VIRTUALDESK As Long = &H4000
    Private Const MOUSEEVENTF_RIGHTUP As Long = &H10
    Private Const MOUSEEVENTF_WHEEL As Long = &H800
    Private Const MOUSEEVENTF_XDOWN As Long = &H80
    Private Const MOUSEEVENTF_XUP As Long = &H100
    Private Sub Command1_Click()
        Dim i As Long
        For i = 1 To 10
            '相对移动(10,10)
            mouse_event MOUSEEVENTF_MOVE, 10, 10, 0, 0
            '点击
            mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
            Sleep 100
        Next
        '按下左键
        mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
        Sleep 100
        '相对移动(80,10)
        mouse_event MOUSEEVENTF_MOVE, 80, 0, 0, 0
        '抬起左键
        mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    End Sub
      

  2.   

    楼上朋友,你这种好象也不怎么行啊..
    SLEEP加在哪我有点乱...
    定义变量I是什么意思呢?
      

  3.   

    eg.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 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 Const MOUSEEVENTF_MOVE = &H1
    Private Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4
    Private Const MOUSEEVENTF_RIGHTDOWN = &H8
    Private Const MOUSEEVENTF_RIGHTUP = &H10Private Type POINTAPI
      x As Long
      y As Long
    End Type'### here, mousecommand are handledPublic Sub MCLeft(x As Long, y As Long)    SetCursorPos x, y
        mouse_event MOUSEEVENTF_LEFTDOWN, x, y, 0, 0
        mouse_event MOUSEEVENTF_LEFTUP, x, y, 0, 0
        DoEvents
        'your code
    End SubPublic Sub MCRight(x As Long, y As Long)    SetCursorPos x, y
        mouse_event MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0
        mouse_event MOUSEEVENTF_RIGHTUP, x, y, 0, 0
        DoEvents
        'your code
    End Sub
      

  4.   

    'FYIPrivate 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 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 Const MOUSEEVENTF_MOVE = &H1
    Private Const MOUSEEVENTF_LEFTDOWN = &H2
    Private Const MOUSEEVENTF_LEFTUP = &H4
    Private Const MOUSEEVENTF_RIGHTDOWN = &H8
    Private Const MOUSEEVENTF_RIGHTUP = &H10Private Type POINTAPI
    x As Long
    y As Long
    End Type'### here, mousecommand are handledPublic Sub MCLeft(x As Long, y As Long)SetCursorPos x, y
    mouse_event MOUSEEVENTF_LEFTDOWN, x, y, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, x, y, 0, 0
    DoEvents
    'your code
    End SubPublic Sub MCRight(x As Long, y As Long)SetCursorPos x, y
    mouse_event MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0
    mouse_event MOUSEEVENTF_RIGHTUP, x, y, 0, 0
    DoEvents
    'your code
    End Sub