AutoHotkey 中的循环错误

Loop Error in AutoHotkey

我正在尝试每 50 毫秒执行一次脚本推送 space,但它只会在我每次按下该键时执行。我希望它不断循环。这是代码:

Loop
{
^p::
Send, {Space}
Sleep, 50
return
}

假设你想通过 Ctrl+P 启动它,你只需要将 loop 里面热键执行体:

^p::
loop {
    Send, {Space}
    Sleep, 50
}
return

注意:用 return 结束热键是一种很好的编程风格,但请注意,这个 return 永远不会达到! (永无止境的循环)

要激活和停用 space 发送,您可能需要使用 setTimer,例如:

#persistent
active := false

^p::
    if(active)
        setTimer, sendSpace, off
    else
        setTimer, sendSpace, 50
    active := !active
return

sendSpace:
    send {space}
return

I don't know why but it's not working. When I press it again nothing happens and it continues pressing space.

既然它对我有用,我猜你的 cpu/ram 是罪魁祸首。我将在这里引用这个问题的答案: :

在我看来最有可能是 AutoHotkey 错误,或者错误地发送了 {space}s 因为你的 RAM 不能很好地处理繁重的程序。

我能想到的你可以尝试的事情:

  • 买台更好的电脑。

  • 使用 setBatchLines, 1ms(在脚本的最开始),使脚本每毫秒休眠 20ms,因此消耗更少 cpu。这可能会清除 AutoHotkey 的想法。

  • SetKeyDelay, 50 也可能有帮助。

有时,按下 ctrlalt 等修饰符会大大减慢 windows 的速度。至少在 Windows Vista 下是这样。例如,您可能想摆脱 ^ (Ctrl) 并将此热键更改为普通的 p:: 热键。

如果这仍然不适合您,您可以试试这个:

#persistent
active := false

^p::
    setTimer, sendSpace, 50
    hotKey, p, stopSendSpace, ON
return

sendSpace:
    send {space}
return

stopSendSpace:
    setTimer, sendSpace, OFF
    hotkey, p, stopSendSpace, OFF
return

这将像上面的行为一样(再次通过 ctrl+p 激活),但是停用发生在 P(没有 Ctrl),没有覆盖默认行为