Time 确定按下按键的时间长度

Time 确定按下按键的时间长度,time,autohotkey,Time,Autohotkey,可以修改下面的脚本,以便 “cl”会在“cl”键按下时触发“www.google.com” 两个按钮都按下500毫秒 原因是,作为输入文本的一部分,有时会连续快速按下“cl”键,然后触发“www.google.com” Per: [T] 在特定的持续时间内编程键向下的唯一方法是使用向下命令,然后使用带有(手动输入的时间)的等待功能,然后使用向上命令[。] 因此,您可以通过在当前if块中放置一个计时器和另一个if块来解决此问题,尽管这听起来不是个好主意。这似乎可以实现以下目的: ~c:: ~l::

可以修改下面的脚本,以便 “cl”会在“cl”键按下时触发“www.google.com” 两个按钮都按下500毫秒

原因是,作为输入文本的一部分,有时会连续快速按下“cl”键,然后触发“www.google.com”

Per:

[T] 在特定的持续时间内编程键向下的唯一方法是使用向下命令,然后使用带有(手动输入的时间)的等待功能,然后使用向上命令[。]


因此,您可以通过在当前if块中放置一个计时器和另一个if块来解决此问题,尽管这听起来不是个好主意。

这似乎可以实现以下目的:

~c::
~l::
If (GetKeyState("c","p") && GetKeyState("l","p")) {
    Send, {Backspace Down}{Backspace Up}{Backspace Down}{Backspace Up}

    sleep, 100

    If (GetKeyState("c","p") && GetKeyState("l","p")) {
    Run, "www.google.com"
    }

    Return

}
Return

使用
A_TickCount
可能是一个不错的选择

~l::
    duration := 0
    If (GetKeyState("c","p") && GetKeyState("l","p")) 
    {
        start := A_TickCount
        While (GetKeyState("c") && GetKeyState("l"))
            Sleep, 1
        duration := A_TickCount - start

    }
    if (duration > 500)
        Run, "www.google.com"
    Return

500毫秒的延迟可能会导致无法控制的按键重复,因此我们无法再可靠地删除按下的按键。因此,我的建议是找到重复延迟,只需等待如此长的时间减去~150毫秒:

~c::
~l::
If (GetKeyState("c","p") && GetKeyState("l","p")) {
    If (!GetKeyState("c","p") || !GetKeyState("l","p"))
        Return
    DllCall("SystemParametersInfo", UInt, 0x16, UInt, 0, UIntP, RepeatDelay, UInt, 0) ;get the key repeat delay
    Sleep % (RepeatDelay+1)*250-150
    If (GetKeyState("c","p") && GetKeyState("l","p")) {
        SendInput, {c up}{l up}{BS}{BS}
        Run, www.google.com
    }
}
Return

谢谢,但我倾向于接受我自己的答案,因为我认为这更容易理解,而且过去一天一直在为我工作,没有任何问题。。。但是,如果我的代码有问题,或者如果使用上面的脚本有好处,请告诉我。我的解决方案唯一明显的好处是,您可以让密钥根据持有密钥的时间执行不同的操作。如果保持一秒钟以上,做些别的事情。如果您希望避免在按住键c和键l时发送键,也可以使用
KeyWait
。如果您希望在释放时运行某个东西,则可接受的答案有效,但此答案在100毫秒后进行评估,无论如何,最好用于游戏目的+1.
~c::
~l::
If (GetKeyState("c","p") && GetKeyState("l","p")) {
    If (!GetKeyState("c","p") || !GetKeyState("l","p"))
        Return
    DllCall("SystemParametersInfo", UInt, 0x16, UInt, 0, UIntP, RepeatDelay, UInt, 0) ;get the key repeat delay
    Sleep % (RepeatDelay+1)*250-150
    If (GetKeyState("c","p") && GetKeyState("l","p")) {
        SendInput, {c up}{l up}{BS}{BS}
        Run, www.google.com
    }
}
Return