代码之家  ›  专栏  ›  技术社区  ›  An Entity

自动热键单击脚本

  •  0
  • An Entity  · 技术社区  · 7 年前

    我刚刚开始使用AutoHotKey,我想制作一个脚本,每秒点击10次,然后按住鼠标右键3秒,然后重置。我打算在alt+c上激活它,如果我按下鼠标左键,它就会断开。

    我想出的剧本

    LButton::
    BreakLoop = 1
    return
    !c::
    Loop
    {
    if (BreakLoop = 1)
    break
    ;
    
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Send, {RButton Down}
    Sleep, 3000
    Send, {RButton Up}
    Return
    }
    

    然而,这是行不通的。有没有办法解决这个问题,或者我对这个脚本采取了完全错误的方法?

    3 回复  |  直到 7 年前
        1
  •  1
  •   stevecody    7 年前

    你确实在代码中犯了一个错误,在底部你确实有 回来 命令输入到 这是不可能的。(本 回来 需要命令!c: :并且它必须位于循环命令之外)

    ~LButton::
    BreakLoop = 1
    return
    
    !c::
    Loop
    {
    if (BreakLoop = 1)
    break
    
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Click
    Sleep, 1000
    Send, {RButton Down}
    Sleep, 3000
    Send, {RButton Up}
    }
    Return
    

    提示:如果将Lbutton::更改为~Lbutton::,则默认的LeftButton也处于活动状态。

        2
  •  0
  •   An Entity    7 年前

    实际上,我能够找到一种方法,通过在循环中嵌套一个循环来显著地压缩它(并更快地打破循环)

    !s::
    BreakLoop = 1
    return
    
    
    !c::
    BreakLoop = 0
    
    Loop
    {
    
    Loop 10
    {
    if (BreakLoop = 1)
    break
    ;
    Click
    Sleep, 900
    }
    
    Send, {RButton Down}
    Sleep, 3000
    Send, {RButton Up}
    }
    if (BreakLoop = 1)
    Break
    ;
    
    Return
    
        3
  •  0
  •   errorseven    7 年前

    一个更好的方法是使用SetTimer,这允许您在动作序列中的任何点打破循环。

    尝试:

    !c::setTimer, doAction, 1000
    !s::SetTimer, doAction, Off 
    
    doAction:
        i += (i <= 14 ? 1 : -13)
        if (i == 14)
            send, {RButton Up}
        else if (i == 11 )
            Send, {RButton Down}
        else if (i <= 10) 
            click   
    return