Два способа управления языками ввода под Windows

На дворе 2022 год, и, казалось бы, всё, что касается такой воспомогательной функции, как переключение языков ввода, уже должно быть давным-давно написано… Но, нет предела стремлению к совершенству. Началось с мелочи: у меня в системе установлены три языка – русский, английский и китайский. Переключались они всегда в цикле по сочетанию Alt+Shift и нужны были все три постоянно. Всё было хорошо, пока в какой-то момент (примерно полгода назад), китайский не “выпал” – стал требоваться редко и начал мешать при переключении Ru-En. А отключать его насовсем в мои планы не входило…

И тому была причина: “китаизация” ввода под Windows – это вообще отдельная история и отдельный мир. В этом мире по-прежнему используются разные программы а-ля “русификаторы”, точно, как у нас было когда-то. Встроенный в систему китайский ввод настолько плох, что им не пользуется никто, все сразу ставят свою программу. А поскольку встроенным вводом никто не пользуется, он и не эволюционирует – существует чисто для галочки, а не для практического применения… Вот. И я установил себе прекрасный (на мой взгляд) Thunisoft Huayu Pinyin и ломать настроенное совсем не хотелось.

А хотелось совсем немного: чтобы по привычному мне сочетанию Alt+Shift переключались русский и английский, а китайский, оставаясь в системе, пропускался и включался отдельной кнопочкой. Вроде, ничего сверхъестественного я не желал, правда? Однако, оказалось, что средствами Windows такое настроить нельзя. Можно на каждый язык сделать отдельную кнопку, а вот циклическое переключение будет перебирать их все…Да, в «десятке» это точно так же, как и во всех предыдущих версиях. Ну, ладно, нет так нет, думаю – найду сторонний переключатель. И не нашел. Всевозможные свитчеры предлагали что угодно, но только не нужную мне функцию. Это было настолько неожиданно, ведь задача кажется такой простой, очевидной и востребованной. Лично знаком с человеком, у которого шесть языков установлено, он их переключает мышкой в панели задач…

Ни сходу, ни специально засев в интернете для поиска, готового решения найти не смог. В сети находились только вопросы, о том, как сделать такое переключение, с пропуском какого-то языка. Ответов было не слишком много, но кое-какие всё же были. Самым подходящим мне показался совет написать скрипт на AutoHotkey. Это довольно известная и мощная программа со встроенным скриптовым языком для создания различных макрокоманд . Более того, скрипт можно скомпилировать в exe-файл и далее он будет жить уже самостоятельно, без AutoHotkey в системе. Мой скрипт перехватывает нажатие Alt+Shift и эмулирует нажатие сочетаний Ctrl+9 и Ctrl+0, к которым я привязал русский и английский, соответственно. Исходный код скрипта:

ru := DllCall("LoadKeyboardLayout", "Str", "00000419", "Int", 1) SwitchLang()
{ global ru w := DllCall("GetForegroundWindow") pid := DllCall("GetWindowThreadProcessId", "UInt", w, "Ptr", 0) l := DllCall("GetKeyboardLayout", "UInt", pid) if (l = ru) { Send {LCtrl Down}{0 Down}{0 Up}{LCtrl Up} } else { Send {LCtrl Down}{9 Down}{9 Up}{LCtrl Up} } } !~LShift UP::
{ if GetKeyState("Alt") { SwitchLang() } Exit
} ~LAlt UP::
{ if GetKeyState("Shift") { SwitchLang() } Exit
}

Своей цели я добился, но, всё же, полоноценным это решение назвать было нельзя. Оно больше походит на заплатку или «взлом систмы» исключительно под мою задачу. И так же оно не работает в консольном окне. Так что, поиск продолжился.

Через некоторое время, где-то в обсуждениях встретил упоминание о программе ReCaps. В этой программе наконец-то нашлась нужная функция – можно было настроить циклическое переключение избранных языков, но, правда, только на клавишу CapsLock. Конечно, хотелось бы сохранить привычное сочетание Alt+Shift… Написал автору письмо с вопросом, можно ли так сделать? Автор программы, Siaržuk Žarski, ответил и прислал тестовую версию, где сочетание клавиш уже можно было менять. Программа понравилась, с удовольствием принял участие в beta-тестировании. В конце декабря вышел релиз, ReCaps v.0.9.0.3480. Обновил исходную бету до текущей версии и продолжил пользоваться. В ней так же нет поддержки переключения языка в консоли, но зато, это уже полнофункциональный менеджер языков ввода с возможностью собирать их в группы и настраивать циклическое переключение для каждой группы отдельно. Для изменения настроек не требуется программирование, можно просто дать человеку-не программисту ссылку на программу и сказать: «Установи вот это и настрой переключение как тебе удобно»

Окно настроек ReCaps. Русский и английский включены, китайский пропускается.
Окно настроек ReCaps. Русский и английский включены, китайский пропускается.

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

Читайте так же:

  • Персистентная очередь на фронтеПерсистентная очередь на фронте Что такое персистентная очередь? Это очередь, события в которой не потеряются в случае перезагрузки приложения.Персистентная очередь во фронтенде (или в мобильном приложении) может быть использована только... пока фронтенд работает. Так ли уж она полезна?Давайте разбираться.Сперва […]
  • iPhone 13 не получит сканер отпечатков пальцевiPhone 13 не получит сканер отпечатков пальцев В начале года появились сообщения о том, что серия Apple iPhone 13 получит сканер отпечатков пальцев Touch ID. Источники утверждали, что последний флагманский iPhone будет использовать двойную аутентификацию (Face ID и Touch ID). Apple действительно зарегистрировала большое количество […]
  • Простой GUI калькулятор на Python #3Простой GUI калькулятор на Python #3 Штош. Дописываем калькулятор. Если вы не читали прошлую статью, я вам настоятельно рекомендую это сделать.Добавляем отрицаниеdef negate(self) -> None: entry = self.ui.le_entry.text()Логика проста: если отрицания нет в поле, значит добавляем. Иначе убираем левый символ с помощью среза […]
  • Проверить сайт на контентПроверить сайт на контент Вы, наверное, знаете, что ваш сайт всегда должен содержать оригинальный контент. Если ваш сайт содержит дублированный контент, это огромная ошибка. Которая может повредить вашему рейтингу сайта и вашей репутации. Плагиат или выдача чужой работы за свою без разрешения недопустимы как […]