Как лучше исправить AHK-скрипт?

Ссылка скопирована
1 ответ

По вводным: windows-10, первый опыт использования AHK. По мотивам своей возни с Linux попытался навесить включение русской раскладки на правый Ctrl, а латинской на левый. Получился вот такой простейший скрипт:

~LCtrl up:: If (A_PriorKey = "LControl") { SendMessage, 0x50,, 0x4090409,, A ; английский } ~RCtrl up:: If (A_PriorKey = "RControl") { SendMessage, 0x50,, 0x4190419,, A ; русский }

Сейчас ситуация такая: он прекрасно работает в обычных окнах, но категорически отказывается срабатывать в служебных окнах Windows: например, в стандартном окне сохранения файла.

Нужно понять: в чём состоит ошибка и как её исправить?

Сейчас ситуация такая: p.S. То, что PuntoSwitcher решает задачу, я знаю. Но связываться с этой программой не имею ни малейшего желания.

По вводным: p.P.S. Смысл именно в том, чтобы оставить в системе единственный способ переключения языков - без навешивания дополнительных комбинаций клавиш в системных настройках и эмуляции их нажатия.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Анна SEO Ответ

В AutoHotkey проблема у такого скрипта обычно в двух вещах: синтаксис старой версии AHK v1 и то, что SendMessage отправляется в активное окно, но не все приложения принимают смену раскладки одинаково. Особенно это заметно в окнах с повышенными правами, UWP-приложениях, играх и некоторых терминалах.

Для AHK v1 ваш вариант лучше оформить с блоками и return:

~LCtrl up::
if (A_PriorKey = "LControl") {
    PostMessage, 0x50, 0, 0x4090409,, A
}
return
 
~RCtrl up::
if (A_PriorKey = "RControl") {
    PostMessage, 0x50, 0, 0x4190419,, A
}
return

~LCtrl up:: if (A_PriorKey = "LControl") { PostMessage, 0x50, 0, 0x4090409,, A } return ~RCtrl up:: if (A_PriorKey = "RControl") { PostMessage, 0x50, 0, 0x4190419,, A } return

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

Если не работает в приложениях, запущенных от администратора, сам AHK-скрипт тоже должен быть запущен от администратора. Windows не даёт обычному процессу нормально управлять elevated-окном.

Ещё момент: A_PriorKey может вести себя не так, если Ctrl используется в сочетаниях. Условие “только одиночное нажатие Ctrl” правильное, но его надо тестировать в нужных приложениях.

Для AHK v2 синтаксис будет другим, v1-скрипт там не заработает без изменений. Проверьте версию AutoHotkey.

Итог: добавьте return, используйте корректный синтаксис под вашу версию AHK, попробуйте PostMessage, а для админских окон запускайте скрипт с такими же правами. Если конкретное приложение игнорирует смену раскладки, это ограничение самого окна, а не только скрипта.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

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

Вам также может быть интересно