我创建了简单的宏来交换剪贴板内容和当前选择。但是当我删除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
答案 0 :(得分:1)
我从您的代码中删除了sleep语句,但只能在选择和剪贴板数据相对较大时重现问题,例如图片数据。
我对您的代码进行了两处更改:
此交换剪贴板和选择
^CapsLock::
tooltip loading clipboard
ClipboardOld := ClipboardAll
clipboard= ; makes ClipWait wait for NEW clipboard
Send ^c
ClipWait 30,1 ; "1" watches for both text and binary data
tooltip swapping clipboard
ClipboardNew := ClipboardAll
Clipboard := ClipboardOld
ClipboardOld=
Send ^v
Clipboard := ClipboardNew
ClipboardNew=
tooltip
return
如果此代码仍无效,我建议尝试确定哪些睡眠语句是使代码正常工作所必需的。通过删除一半的睡眠陈述并进行测试,直到找到所需的陈述,使用分而治之的方法和消除过程。
更新:这会尝试解决评论部分中描述的问题:
^CapsLock::
tooltip loading clipboard
ClipboardOld := ClipboardAll
clipboard=
Send ^c
ClipWait 30,1
tooltip swapping clipboard
ClipboardNew := ClipboardAll
Clipboard= ; reset clipboard to enable ClipWait
Clipboard := ClipboardOld
ClipWait 30,1
ClipboardOld=
Send ^v
Clipboard= ; reset clipboard to enable ClipWait
Clipboard := ClipboardNew
ClipWait 30,1 ; Wait for clipboard to restore
ClipboardNew=
tooltip
return