Pull to refresh

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

Reading time3 min
Views20K

На дворе 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. Русский и английский включены, китайский пропускается.


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

Tags:
Hubs:
+30
Comments63

Articles