为什么这个autohotkey脚本无法始终如一地保留剪贴板内容?

时间:2010-03-15 15:44:27

标签: windows clipboard autohotkey

这是我的一个脚本片段,试图将额外的Unicode精彩放在我的指尖。

::\iff::
    SendUnicode("⇔")
    return

; many rules later...

SendUnicode(char){
    ClipSaved := ClipboardAll ;;;
    ;apparently this is the only way AHK can handle Unicode.
    Transform, Clipboard, Unicode, %char%
    SendInput ^v
    Clipboard := ClipSaved ;;;
    return
}

不幸的是,我不得不注释掉标有;;;的行,因为它们在保留剪贴板内容方面给出了不一致的结果。我经历的最常见问题是粘贴现有剪贴板内容而不是char

关于上述原因失败的原因以及我可以采取哪些措施来解决问题?

1 个答案:

答案 0 :(得分:2)

在Windows上,剪贴板可以容纳不同类型的数据。粘贴时,应用程序会检查哪些类型的数据可用并请求一种或多种类型,然后决定如何使用它。如果剪贴板上已有数据,并且AutoHotkey将unicode添加到剪贴板而不清除它,则应用程序可能会看到并请求其他数据而不是unicode。

这些是Windows上可用的标准剪贴板格式:http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx

Autohotkey可能会使用CF_UNICODE格式进行粘贴,并且应用程序正在请求陈旧的CF_TEXT数据。

您应该可以使用Autohotkey_L的Send功能来绕过剪贴板要求。 http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

使用Autohotkey_L尝试此论坛帖子中的代码:http://www.autohotkey.com/forum/viewtopic.php?p=272379#272379