0
我创建了简单的宏来交换剪贴板内容与当前选择。但是,当我删除Sleep
命令时,它会停止正常工作:它不会完成剪贴板操作。试试没有这些命令来看看我的意思。剪贴板操作不需要人工延迟使用睡眠语句
但Sleep
命令比适当的解决方案更加黑客。如果500毫秒太长 - 或者在某些情况下 - 等待时间太短会怎样?
请问没有Sleep
表示合适的AutoHotKey方法是什么?
^CapsLock::
ClipboardOld=%ClipboardAll%
Send ^c
Sleep 500
ClipWait
ClipboardNew=%ClipboardAll%
Sleep 500
Clipboard=%ClipboardOld%
Sleep 500
ClipboardOld= ;clear global variable to conserve memory
Send ^v
Sleep 500
Clipboard=%ClipboardNew%
Sleep 500
ClipboardNew= ;clear global variable to conserve memory
Return
谢谢你的回答。我可以确定哪些睡眠语句是必要的(正如您所说,问题与大数据或高CPU负载有关),但是我的问题是在保持代码可靠工作的同时是否可以完全忽略它们,因为我想了解原理。 AutoHotKey能否可靠地使用剪贴板工作,而无需使用Sleep语句的解决方法? (顺便说一下,我发现在样式'变量=%ClipoardAll%'中的赋值是问题的一部分。剪贴板备份的正确形式是'variable:= ClipoardAll',它的行为也不同。) – miroxlav
我发布的答案没有使用sleep语句,对我来说可靠地工作。如果你想支持任意大的剪贴板内容,我建议增加ClipWait并使用工具提示让用户知道发生了什么。 –
我再次感谢您的这些改进。我提出了答案,但我现在不会将其标记为接受,因为它没有解除需要“睡眠”陈述的魔力。如果我使用你的代码,它将不可靠地工作,直到我在'Send^v'前后插入'Sleep'。所以具有“睡眠”的魔法似乎仍然是稳定的必要条件。没有“睡眠”的方式是否仍然存在。如果您写作AutoHotKey专家,除了使用“睡眠”之外没有其他办法,我会接受答案。 – miroxlav