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

时间:2014-09-16 13:28:09

标签: time autohotkey

可以修改以下脚本以便键 " CL"火灾" www.google.com"就好像" cl"按键 都按了500毫秒?

原因是因为部分键入文本有时候键是" cl"快速连续按下然后触发" www.google.com"

~l::
If (GetKeyState("c","p") && GetKeyState("l","p")) {
    Send, {Backspace Down}{Backspace Up}{Backspace Down}{Backspace Up}
    Run, "www.google.com"
}
Return

4 个答案:

答案 0 :(得分:4)

使用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

答案 1 :(得分:1)

这似乎可以解决问题:

~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

答案 2 :(得分:0)

this AutoHotKey forum post

  

[T]他只能在特定的持续时间内编程一个键是使用down命令然后使用带有(手动输入的时间)的wait函数然后使用up命令[。]

所以,您可以通过在当前if块中放置一个计时器然后另一个if块来解决这个问题,尽管这听起来不错。

答案 3 :(得分:0)

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

SystemParametersInfo - SPI_GETKEYBOARDDELAY