【问题标题】:Loop Error in AutoHotkey [closed]AutoHotkey中的循环错误[关闭]
【发布时间】:2015-06-01 06:28:07
【问题描述】:

我正在尝试每 50 毫秒创建一个脚本推送空间,但它只会在我每次按键时执行。我希望它不断循环。代码如下:

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

【问题讨论】:

    标签: autohotkey


    【解决方案1】:

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

    ^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}s,因为您的 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)时,不会覆盖默认行为

    【讨论】:

    • 感谢它的工作!但现在我想知道如何用相同的键序列阻止它。谢谢!
    • 好像不行??
    • 究竟是什么?我测试时没有遇到任何问题
    • 我是个十足的菜鸟。呃......你应该如何结束它?再次按 CTRL + P 或...?
    • 是的,就像你开始它一样
    猜你喜欢
    • 2015-09-06
    • 2020-09-03
    • 1970-01-01
    • 2013-01-12
    • 2015-08-09
    • 2012-12-09
    • 1970-01-01
    • 2016-04-23
    • 2021-03-04
    相关资源
    最近更新 更多