Почему этот скрипт autohotkey не может последовательно сохранить содержимое буфера обмена? - PullRequest
1 голос
/ 15 марта 2010

Вот фрагмент моего сценария, в котором я стараюсь придать кончикам пальцев дополнительную 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 Ответ

2 голосов
/ 15 марта 2010

В Windows буфер обмена может содержать различные виды данных. При вставке приложение проверяет, какие типы данных доступны и запрашивает один или несколько типов, а затем решает, как их использовать. Если в буфере обмена уже есть данные, и AutoHotkey добавляет в буфер обмена юникод, не очищая его, тогда приложение может увидеть и запросить другие данные вместо юникода.

Это стандартные форматы буфера обмена, доступные в Windows: http://msdn.microsoft.com/en-us/library/ms649013(VS.85).aspx

Возможно, Autohotkey вставляется в формате CF_UNICODE, и приложение запрашивает устаревшие данные CF_TEXT.

Вы должны иметь возможность использовать функцию отправки Autohotkey_L, чтобы обойти требование буфера обмена. http://www.autohotkey.net/~Lexikos/AutoHotkey_L/

Попробуйте код в этом сообщении на форуме с Autohotkey_L: http://www.autohotkey.com/forum/viewtopic.php?p=272379#272379

...