如何根据按键是按下,按下还是按下两次来做出不同的动作?

时间:2018-07-22 06:38:23

标签: loops autohotkey key-bindings

我想制作一个自动热键脚本,以在活动模式下玩游戏。

我想要的是

  • 如果我两次按“ f”并延迟300毫秒,那么就会按一次“ i”。
  • 如果我按一次“ f”,则按一次“ LButton”。
  • 如果我按住“ f”,那么按住“ LButton”直到我离开f按钮。

到目前为止,我已经尝试过使用此代码,但是它并不能完全满足我的要求。

 f::
    if 1_presses > 0
    {
        1_presses += 1
        SetTimer Key1, 300
        return
    }
    1_presses = 1
    SetTimer Key1, 300
    return

    Key1:
    SetTimer Key1, off
    if 1_presses = 2
      Send {i}
    else
       (not GetKeyState("LButton" , "P") )
        Click down
       1_presses = 0
    return
f Up::Click up

此代码中的错误是

  • 如果我按f一次,则LButton会被永久按下

  • 如果我按f两次,则我被按一次,但LButton再次被永久按下

  • 如果我握住f,则什么都不会发生。

P.S。请尝试使其尽可能简单,以使输入延迟最小。

编辑:- 我自己想通了。自从我搜索了很多东西之后,并没有找到输入延迟最小的简单代码,很想与社区分享。

f::
    KeyWait, f, T0.1

    if (ErrorLevel)
    {
        if( not GetKeyState("LButton" , "P") )
        {
        Click down
        }
    }

    else 
    {
        KeyWait, f, D T0.1

        if (ErrorLevel)
        {
            Send {LButton}
        }
        else
        {
            Send {i}
        }
    }

    KeyWait, f
return

0 个答案:

没有答案