默认情况下,在 Windows 上,当复制文本时,它会被放入剪贴板。但是当尝试复制空 文本时,剪贴板未被触及。例如,在编辑器中不选择任何文本,然后按 ctrl+c
,将不会导致剪贴板发生任何变化。
问题是,我需要用 AutoHotKey 捕捉这个事件。由于剪贴板未更改,我不知道如何干净地执行此操作(即没有超时)。
有人知道怎么做吗?
编辑:为了澄清,我从 AutoHotKey 中发送 ctrl+c。我这样做是为了判断是否选择了任何文本,即我正在发送 ctrl+c,然后检查是否有任何文本被复制到剪贴板。问题是,如果没有选择文本,AutoHotKey 的剪贴板处理程序永远不会被调用,迫使我使用超时,这不是好的做法。
最佳答案
这是我做的。由于剪贴板在 AutoHotkey 中是一个变量,您可以检查它是否为空。我先清空剪贴板,发送control+c,然后看看剪贴板是不是还是空的。如果需要,您可以先将当前剪贴板临时移动到一个临时位置。
ClipSaved := ClipboardAll
Clipboard = ; empties the clipboard
Send ^+{Left} ; I just used highlight left to select text, you can replace this with
; whatever your program uses to select an input.
Send ^c ; attempt to copy text
If Clipboard = ; checks to see if clipboard is empty
{
break ; Put what you want to do if the clipboard is empty, I used break to stop a loop
}
Clipboard := ClipSaved ; puts the original clipboard contents back
我正在从一个打开的文档中搜索文本,用户可以在其中选择向前或向后的方向。倒退时,它会卡在文档开头的循环中。我设置了一个循环限制以防止它成为无限循环,但它仍然浪费时间等待循环完成。如果剪贴板为空,我使用 break 函数结束循环。
为了在应有的功劳下给予功劳,我从另一篇有其他有用提示的帖子中获得了灵感。它发布了您可以使用此脚本检查空白变量。 http://www.autohotkey.net/~deleyd/xprxmp/autohotkey_expression_examples.htm#J v := ""
If v =
MsgBox v = ""
If (v = "")
MsgBox v = ""
我从 AutoHotkey 文档网站找到了如何临时存储和替换剪贴板内容。 http://www.autohotkey.com/docs/misc/Clipboard.htm
ClipSaved := ClipboardAll ; Save the entire clipboard to a variable of your choice.
;... here make temporary use of the clipboard, such as for pasting Unicode text via Transform Unicode ...
Clipboard := ClipSaved ; Restore the original clipboard. Note the use of Clipboard (not ClipboardAll).
ClipSaved = ; Free the memory in case the clipboard was very large.
希望这对您有所帮助。 塞缪尔
关于windows - 从 AutoHotKey 脚本捕获 Windows 上空文本的复制/粘贴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3381451/