AutoHotkey中的循环错误

时间:2015-05-30 21:39:20

标签: autohotkey

我试图每隔50ms创建一个脚本推送空间,但每次按下该键时它都会执行此操作。我想让它不断循环。这是代码:

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

1 个答案:

答案 0 :(得分:2)

假设您想通过 Ctrl + P 启动它,您只需将loop 置于热键执行中体:

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

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

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

#persistent
active := false

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

sendSpace:
    send {space}
return
  

我不知道为什么,但它不起作用。当我再次按它时没有任何反应,它继续按空格。

因为它为我工作,我想你的cpu / ram应该受到责备。我在这里引用这个问题的答案:SendInput won't work at high speed

在我看来最像是一个AutoHotkey错误,或错误地发送{space},因为你的RAM无法很好地处理繁重的程序。

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

  • 购买更好的电脑。

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

  • SetKeyDelay, 50也可能会有所帮助。

有时,按下修饰符(例如ctrlalt)会大大减慢窗口速度。至少在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),而不会覆盖默认行为