在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.

希望这可以帮助。
塞缪尔

10-07 12:19