代码之家  ›  专栏  ›  技术社区  ›  badp

为什么这个自动热键脚本不能一致地保留剪贴板内容?

  •  1
  • badp  · 技术社区  · 15 年前

    下面是我的一个脚本的一个片段,它试图将额外的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 回复  |  直到 15 年前
        1
  •  2
  •   lunixbochs    15 年前

    在Windows上,剪贴板可以保存不同类型的数据。粘贴时,应用程序检查哪些类型的数据可用,并请求一个或多个类型,然后决定如何使用它。如果剪贴板上已经有数据,并且autohotkey在不清除数据的情况下将unicode添加到剪贴板,那么应用程序可能会看到并请求其他数据,而不是unicode。

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

    自动热键可能正在使用cf_unicode格式粘贴,应用程序正在请求过时的cf_文本数据。

    您应该能够使用自动热键发送功能来绕过剪贴板的要求。 http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

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