1

Тема: AHK: прописные и строчные буквы

Всем доброго дня.

Вопрос, возможно, не совсем про AutoHotkey, но я не понимаю, у кого ещё спрашивать.

Ситуация в следующем. Есть скрипт, который отправляет длинную последовательность нажатий клавиш для проведения серии процедур Find&Replace в одном веб-приложении (по сути, проделывается транслитерация). Символы для замены посылаются в виде кодов Unicode с помощью функции:

EncodeInteger(ref, val)
{
   DllCall("ntdll\RtlFillMemoryUlong", "Uint", ref, "Uint", 4, "Uint", val)
}

SendUnicodeChar(charCode)
{
   VarSetCapacity(ki, 28 * 2, 0)
   EncodeInteger(&ki + 0, 1)
   EncodeInteger(&ki + 6, charCode)
   EncodeInteger(&ki + 8, 4)
   EncodeInteger(&ki +28, 1)
   EncodeInteger(&ki +34, charCode)
   EncodeInteger(&ki +36, 4|2)

   DllCall("SendInput", "UInt", 2, "UInt", &ki, "Int", 28)
}

Сначала отправляются инструкции по замене строчных букв, потом — прописных.

Есть два компьютера, на которых выполняется скрипт. На первом всё происходит правильно — строчные буквы заменяются строчными, прописные — прописными. На втором же поиск строчных букв распространяется и на прописные, в результате чего все буквы становятся строчными.

Вопрос: в какую сторону тут копать? ОС одна и та же, версии браузера на машинах разные (FF 3.5 и 3.6.1), версии AutoHotkey — неизвестны (кстати, где их смотреть?).

Спасибо.

2

Re: AHK: прописные и строчные буквы

При запущенном скрипте в трее должен быть его значок. В его меню нажмите Open. В заголовке открывшегося окна должна быть версия АНК.

3

Re: AHK: прописные и строчные буквы

shlema пишет:

На втором же поиск строчных букв распространяется и на прописные, в результате чего все буквы становятся строчными.

Не совсем понял, какое отношение приведённые функции имеют к поиску? Наверное, проблема в нём.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: прописные и строчные буквы

Собственно, процесс поиска/замены выглядит так:

;a
SendInput ^{sc021}^{sc01E}{Del}
SendUnicodeChar(0x0430)
SendInput {Tab}^{sc01E}{Del}
SendUnicodeChar(0x0061)
SendInput {Tab 5}{Enter}{Esc}

Поиск на обеих машинах одинаковый, но работает почему-то по-разному.

P.S. Уже всплыла новая проблема — иногда команда SendUnicodeChar не отправляется (ну, или функция не отрабатывает) и некоторые символы просто удаляются (то есть, заменяются на «ничто»). Теряюсь в догадках.

5

Re: AHK: прописные и строчные буквы

Код явно нуждается в комментариях. Лично я не понимаю, что там происходит.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: прописные и строчные буквы

Да, прошу прощения.

;a
SendInput ^{sc021}^{sc01E}{Del} ;open Find dialogue, clear the first input area
SendUnicodeChar(0x0430) ;input a cyrillic char
SendInput {Tab}^{sc01E}{Del} ;go to the other input area, clean it
SendUnicodeChar(0x0061) ;input a latin char
SendInput {Tab 5}{Enter}{Esc} ;go to Replace All button, execute command, go back

Впрочем, проблема уже стала умозрительной. Вылезли непредвиденные последствия, придется делать совсем иначе.