что делать если иероглифы в ahk

что делать если иероглифы в ahk

Alan Arbatskiy

Активный пользователь

— 0. Вступление
Скачать биндер можно на оффициальном сайте: https://www.autohotkey.com/
После полной установки программы, нажмите ПКМ по свободному месту в папке/на рабочем столе и в разделе «Создать» выберите «AutoHotKey Script».
После этого нажмите ПКМ по созданному файлу и выберите пункт «Edit Script». В открывшемся окне можете стереть примечание от автора и начать писать свой шедевр.

— 2. Автоматическое определение языка и раскладки клавиатуры.
Данный шаг Вы можете пропустить, но тогда при неправильной раскладке клавиатуры вместо красивого текста, который вы расписывали несколько десятков минут, в чат будут отправляться сплошные вопросительные знаки, так как скрипт не будет видеть на вашей текущей раскладке бо’льшую часть нужных для набора текста символов. Во избежание этих проблем, настоятельно Вам рекомендую на следующей строке, после назначение горячей клавиши, прописать следующее:
SendMessage, 0x50,, 0x4190419,, A

Также немаловажно задать паузы между сообщениями, иначе программа может сойти с ума и начать смешивать ваши сообщения в единое целое.
Так, прописав команду Sleep и число миллисекунд после нее (1000 = 1 секунда), Вы задаете задержку между выполнениями следующих команд.
Рекомендую использовать задержку 700 между отыгровками /me /do /todo, и 1000 между сообщениями в чат (IC, /b), дабы антифлуд не триггерился на ваш скрипт. (насколько мне известно, в /f /c задержку можно ставить 200, там антифлуд почти не срабатывает).

— 4. Окончание скрипта
После того, как вы прописали все сообщения, не забудьте написать завершающую команду Return, которая останавливает чтение макроса. Иначе, если у Вас в одном файле сразу несколько скриптов, последствия будут неутешительными.

Источник

AutoHotkey и русский язык – дружба навеки

(Часть здесь написанного уже упоминалась на этом форуме, но The gray Cardinal предложил соединить все в одном месте, расширить описание и осветить темные места).

Прежде, чем мы начнем, замечу, что в статье рассматривается обычная для России ситуация, когда в системе установлены два языка: английский и русский. И большинство случаев неправильной работы горячих клавиш, строк автозамены (Hotstrings и Auto-replace) и команд Send, SendRaw, ControlSend, ControlSendRaw связаны именно с этим двуязычием (кривые руки, конечно, не в счет).

Если у вас установлено не два, а больше языков, то просто делайте соответствующие поправки.

Приступим. Главной и единственной теоретической основой этой темы является то, что в Windows есть так называемый «язык ввода по умолчанию». Это язык, который используется при загрузке компьютера. Назначается он в Панели управления > Язык и региональные стандарты > вкладка Языки > кнопка Подробнее… > вкладка Параметры > раздел Язык ввода по умолчанию.

Примечание: в конце статьи есть скрипт для быстрого переключения языка ввода по умолчанию.

Запомним это: ВСЕ ПРИЛОЖЕНИЯ ЗАПУСКАЮТСЯ С ЯЗЫКОМ ПО УМОЛЧАНИЮ.

Я обязательно поясню, что это значит для нас, но сначала…

Горячие клавиши

… напишем и запустим такой крошечный скриптик.

Теперь нажмем клавиши Ctrl+Alt+z. Если вы увидели сообщение «Нажата горячая клавиша.», значит в вашей Windows язык ввода по умолчанию – английский. Если это сообщение вы увидели при запуске скрипта, еще до того, как нажали горячие клавиши, значит язык ввода по умолчанию – русский. Иными словами, скрипт не сумел зарегистрировать горячую клавишу и продолжил выполняться так, будто нашей горячей клавиши там и не было. А если бы этим продолжением было не простое сообщение, а что-то более серьезное? У меня, скажем, есть горячая клавиша форсированной перезагрузки, и тогда – конец всему несохраненному?

Отсюда первая проблема.

Если назначаемая вами клавиша может иметь и другую раскладку, то ваш скрипт становится зависимым от раскладки (языка) по умолчанию.

Примечание: то, что клавиша может иметь и другую раскладку, легко определить по цвету: например, на моей клаве все независимые от раскладки клавиши имеют черный цвет, а все клавиши русской раскладки имеют еще и «красных дьяволят».

Из формулировки проблемы ясно, что она не возникает, если вы назначаете «независимую» клавишу. Например, такое назначение не зависит от раскладки и сработает всегда:

Решение первой проблемы: если клавиша «зависима» от раскладки, и если вы хотите быть уверены, что ваш скрипт будет работать, невзирая на то, какой язык по умолчанию в системе, то вариантов решения может быть два:

В нашем примере, для 1-го варианта, перед первой строкой (или после неё, это не важно), добавьте строку:

А для 2-го варианта вместо первой строки напишите:

Конечно, назначение горячей клавиши через скан-код (sc), гораздо универсальнее. Поэтому именно этот метод я вам и рекомендую.

Примечание: если вы не предполагаете менять язык ввода по умолчанию и не намерены использовать ваши скрипты где-нибудь еще, кроме вашей машины, то, разумеется, можете назначать горячие клавиши только в одной раскладке (для английского языка по умолчанию – на английском, для русского – на русском), но так ли вы уверены, что язык ввода вы никогда не измените, или в том, что не придете со своим скриптом куда-нибудь, где будет другой язык по умолчанию? Может, лучше учесть это сразу?

Автозамены (Hotstrings и Auto-replace)

Скан-код – хорошо, однако, с автозаменами этот номер не пройдет. Их придется назначать только по 1-му варианту, т.е. двуязычно.

Хотите – поверьте, хотите – проверьте, но зависимость автозамен от раскладки по умолчанию точно такая же, как и горячих клавиш.

А мы проверим другое. Напишем и запустим такой пример автозамены из справки к AutoHotkey, дополнив его русским текстом:

Теперь запускаем Блокнот и используем в нем нашу автозамену, напечатав btw (если у вас раскладка по умолчанию – русская, то печататься будет не btw, а иец – русские буквы-соседи на клавиатуре, но мы не обращаем внимание). Жмем enter.

Ура! Что хотели, то и пропечаталось.

А теперь изменим раскладку в Блокноте, нажав Alt+Shift (или что там у вас), и опять печатаем btw, и жмем enter.

Мать моя! Получилась лажа.

Если у вас раскладка по умолчанию русская, то вы увидите: «by the way/ B ljgjkytybt yf heccrjv/».

Т.е. все русские буквы (и даже точка), напечатаны их английскими «сожителями» на клавиатуре.

А если раскладка по умолчанию – английская, то вы увидите: «ин еру цфню И дополнение на русскомю».

Т.е. все английские буквы (и даже точка), напечатаны их русскими «сожителями» на клавиатуре.

А произошло то, о чем мы говорили в начале, и с чем я обещал разобраться. А именно: скрипт был запущен с языком по умолчанию (я просил вас это запомнить), и с этим же языком у нас запустился Блокнот. Поэтому сначала все было ОК, но после того, как мы переключили раскладку для Блокнота, возникло рассогласование раскладок Блокнота и нашего скрипта (для него раскладку мы ведь не переключали).

Отсюда вторая проблема.

Если раскладка скрипта не совпадает с раскладкой того приложения, куда высылается текст, то, скорее всего, текст будет выслан криво.

Это и есть то, о чем написано в FAQ’е, переведенном опять же Дедом Мазаем http://www.script-coding.com/AutoHotkey/FAQ.html, (вопрос «Я использую несколько языковых раскладок на клавиатуре. Почему команда Send и строки автозамены иногда пропечатывают мне не те буквы?»).

Решение, предлагаемое там же, в FAQ`е, на мой взгляд, крайне неуклюже.

Тут надо сказать, что Дед Мазай, конечно же, не виноват. Как известно: «Переводчик прозы – раб, переводчик поэзии – соперник». И хотя сам AutoHotkey, безусловно, поэзия, справка к нему все же цинично-англоязычная проза 🙂

Так вот, предлагается там, обнаружив неверное срабатывание автозамены или команды Send (о ней мы будем говорить позже), удалить-отменить всё, что наделали эти команды (об этом не сказано, но как же иначе?), а дальше либо вызвать горячими клавишами фрагмент скрипта, который откроет своё окно, переключит свою раскладку, закроет своё окно, либо проделать все это «вручную». Мало того, что оба варианта неудобны, так может случиться, что и отменять уже будет поздно. Как говориться: «ОК нажат, к чему теперь рыданья.»

Добавлю, что если вы решите попробовать описанный там вариант, автоматически меняющий языковую раскладку для скриптов AutoHotKey, то вам нужно учесть, что клавиши смены раскладки у вас могут отличаться, а главное – уже рассмотренную проблему номер один. Т.е. до переключения раскладки указанным там способом у вас не будет работать какая-то одна из автозамен (в зависимости от раскладки, естественно), а после переключения откажется работать другая, хотя первая – согласится. Поэтому я предлагаю другое…

Решение второй проблемы:

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

К сожалению, простой способ сделать такую синхронизацию мне не известен, но способ таки есть. Для начала, нужно отказаться от простых автозамен (это когда то, что заменяется, находится в одной строке с тем, на что заменяется), и использовать вместо них строки автозамены.

Строки выше – простая автозамена (Auto-replace). А строки ниже – строки автозамены (Hotstrings).

Примечание: возможно, Hotstrings было бы правильнее перевести как горячие строки (по аналогии с горячими клавишами, как и задумано), ну да как Gourmet перевела http://www.script-coding.com/AutoHotkey/Hotstrings.html, так мы и пишем. За труд ей, конечно, спасибо.

Стало быть, от простых автозамен отказываемся, и вместе со строками автозамены будем использовать команду Send. У этой команды точно такие же сбои, как и у простых автозамен. И сама по себе она дело не поправит, но зато теперь мы можем вставить перед Send что-то такое, что дело поправит. Я написал для этих целей функцию. Вот она:

Итак, мы сохраняем приведенную функцию как отдельный скрипт, а затем в нашем «подопытном» скрипте подключаем ее примерно так (путь, разумеется, указываете свой):

Теперь эту функцию можно использовать, и делается это так:

И вот теперь вы можете переключать раскладку в целевом приложении (в нашем случае – в Блокноте), как вам заблагорассудится, скрипт будет высылать текст правильно. Ура!

Теперь рассмотрим команду Send отдельно от автозамен

Эта команда может использоваться для двух целей–режимов:

«Однораскладочные» англичане-американцы используют эту команду одинаково в обоих случаях. Нам же придется сделать упомянутое условное разделение, мы ведь не хотим наступать на «грабли», обходить которые уже научились ранее.

Итак, режим 1-й – высылка текста. Ну, тут все ясно. Я уже говорил, что команда Send «болеет» теми же сбоями, что и простые автозамены, соответственно и «лечится» так же: просто перед ней вызываем рассмотренную функцию корректировки раскладки скрипта и тащимся.

А режим 2-й – еще проще. Если нам нужно выслать управляющие клавиши, то:

Я не говорил здесь о команде SendRaw только потому, что она не высылает управляющих клавиш (так и была задумана), поэтому, когда хотим что-то выслать этой командой, то пользуемся ей как для первого режима команды Send.

И, для полноты, так сказать, добавлю, что есть ещё один способ высылать текст командой Send, «не боясь раскладок». Я не нахожу его удобным, но, тем не менее, он есть. Это высылка текста кодами ASCII. Управляющие клавиши «нажать» этим способом не получится, но текст выслать можно. Выглядит это вот так:

Ладно, с этим разобрались, теперь – команда ControlSend (ControlSendRaw)

Плохие новости: команду ControlSend усмирить для работы с «зависимыми» клавишами мне не удалось. Грузить вас разным сочетанием условий, при которых не хотят печататься то английские, то русские буквы, я не буду. Если хотите – поковыряйтесь сами.

Хороших новостей две: первая – независимые клавиши, как всегда, работают нормально, вторая – в большинстве случаев команду ControlSend можно заменить командой Send, с которой мы справились. Удобство команды ControlSend в том, что она позволяет высылать тексты-клавиши контролам (управляющим элементам окна) без активизации окна, которому эти контролы принадлежат. Но почти всегда можно окно безболезненно активизировать, установить фокус на нужный контрол и выслать ему текст Send’ом. Вот, например, так:

А зато теперь, команда – душевный отдых: ControlSetText

Эта команда прекрасно работает при любых условиях, для любой раскладки и для любых символов, и не требует заботы.

Она заменяет ВЕСЬ ТЕКСТ контрола на указанный вами. Использовать её можно не только для того, чтобы изменить, например, надпись на кнопке (полезного применения чего я не вижу), а и для того, чтобы заполнять какие-нибудь контролы-поля, или чтобы вставлять какие-нибудь пути к чему-нибудь, например, при автоматизации установки каких-либо программ. Я так «привязался» к этой команде, что, при написании скрипта, всегда ищу, в первую очередь, возможность использовать именно её 🙂

С проблемными для нашего человека командами AutoHotkey мы разобрались, теперь – факультатив.

Начну с того, что если вы используете какой-нибудь автоматический переключатель раскладок клавиатуры, например, PuntoSwitcher, то проявите осторожность. Хотя обычно проблем не бывает, но учесть не мешало бы. Вот, допустим, захотите вы командой Send выслать английские буквы ghbvth (мало ли зачем, это же я для примера), а PuntoSwitcher распознает их как слово «пример», и обязательно поправит, а это не то, что вам нужно, а скрипт продолжает работу… Это может закончиться нехорошо. Избежать этого можно, либо совсем отключив автокоррекцию раскладки, и корректировать её по горячей клавише, либо назначить в PuntoSwitcher’е горячие клавиши на отключение автокоррекции, и перед «сомнительными» командами нажимать их скриптом (отключив автокоррекцию), а потом опять нажимать (включив автокоррекцию). Например, так:

Кстати, у PuntoSwitcher’а конвертация неправильно введенных символов жестко прошита на клавишу Break, а в силу особенностей моей клавы и её расположения, мне нажимать Break неудобно. Я написал скрипт, который переназначает конвертацию на двойное нажатие (как двойной клик) клавиши Ctrl:

Пример выше – только для иллюстрации. Вызывать пункты всяческих меню «Файл», «Правка» и т.д. (на любом языке), лучше командой WinMenuSelectItem. И причина, по которой я об этом рассказываю здесь, такая: если у проги, в которой вы хотите вызвать пункты меню, есть многоязычный интерфейс, то, чтобы быть уверенным, что переключившись в другой язык (не раскладку, а интерфейс программы), вы все равно сможете вызвать нужный вам пункт меню, нужно использовать не имена пунктов меню, а их номера.

А что, если мы хотим, чтобы какое-либо окно автоматически переключалось в нужную раскладку? Например, у меня раскладка по умолчанию – русская, поэтому Total Commander запускается в русской раскладке. Меня это устраивает, но я часто пользуюсь быстрым поиском в ТС, и окошко быстрого поиска открывается тоже, разумеется, в русской раскладке, а вот это меня не устраивает (обычно я ищу по английским буквам). Можно, конечно, переключить раскладку и «вручную», но ведь есть AutoHotkey! Вот и попросим его. Создаем таймер, по которому будут выполняться всяческие автоматизации окон, и вписываем его где-нибудь в автовыполняющуюся секцию скрипта.

А теперь сама подпрограмма автоматизации окон.

Как, надеюсь, понятно – скрипт проверяет, активизировалось окно Быстрого поиска только что, или оно уже тут давно (давнее, чем прошел предыдущий цикл по таймеру). Это нужно для того, что если я захочу поискать в этом окне на русском, то я переключу раскладку «руками» и скрипт мне не будет мешать. Само собой, что так можно поступать с любыми окнами.

А вот еще на тему русского языка (не совсем про AutoHotkey, но может кому-то будет полезно). Иногда, при копировании в буфер из некоторых англоязычных (хоть, иногда, и русифицированных) программ, и последующей вставки куда-нибудь, вдруг оказывается что вставляемый текст весь в вопросах или кракозябрах. Если у вас так бывает, то скопируйте текст ниже, вставьте его в блокнот, и сохраните с любым именем и расширением reg. Получится файл реестра, который нужно запустить-подтвердить, и перезагрузиться. Помогает решить проблему с кракозябрами в 99,8 % случаев.

Обратите внимание, что если у вас 9x, Me или NT4, то вам нужен другой файл, вот он:

Ну и напоследок пара скриптиков для русско-английских пользователей (для нас то есть).

Сначала скрипт для облегчения переводческой работы (например, для тех, кто самоотверженно переводит справку AutoHotkey).

А вот скрипт для быстрого переключения языка ввода по умолчанию. Он может помочь нам в проведении опытов, описанных в начале этой статьи.

Здесь я вынужден с вами попрощаться. Я старался быть кратким, поэтому «за бортом» осталось множество нюансов. Однако, главные проблемы AutoHotkey и русского языка мы рассмотрели. Надеюсь, что что-то из написанного окажется вам полезным. И надеюсь, что когда-нибудь, разработчики AutoHotkey учтут, что их замечательным продуктом пользуются не только «однораскладочники». И тогда нам не придется прибегать ко всем тем ухищрениям, прибегать к которым мы пока вынуждены.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *