Pull to refresh

Самодельный переключатель раскладок под Windows

Reading time 3 min
Views 7.6K
Про переключение раскладок клавиатуры написано очень много, на хабре в том числе. Когда, год или два назад, я понял, что привычный Ctrl+Shift меня не устраивает, я, конечно, не стал изобретать велосипед, а начал искать, что по этому поводу уже придумано. И временно утонул в океане идей и мнений.
У меня было две причины искать лучшего. Во-первых, прекрасные люди из числа производителей ноутбуков придумали на привычное место клавиши Ctrl помещать Fn (иногда это можно пофиксить в биосе). При нормальном расположении клавиш комбинация Ctrl+Shift набирается не глядя, а после усовершенствований все везде стало по-разному. Во-вторых, понадобились дополнительные раскладки. А циклическое переключение для трех и более раскладок — это беда, об автоматизме можно забыть.
Перепробовал массу вариантов, начиная с Punto. Все чем-то не устраивали. В конце концов, собрал собственный велосипед на основе скрипта AutoHotKey, которым и пользуюсь. Публикую в порядке обмена опытом, не претендуя на какую-либо новизну.
Две основные раскладки включаются детерминированно, английский — CapsLock, русский — Shift+CapsLock. Остальные установленные раскладки подключаются циклически, учитывая их редкое использование. Не буду ничего говорить про плюсы и минусы, удобство переключения раскладок — дело очень индивидуальное.

[Update. С подачи Crazybot начал использовать RusLat. Пока работает, как часы, и делает все, что надо, и ничего лишнего (!). Настроил CapsLock — английский, Shift+CapsLock — русский, Ctrl+Shift — циклическое переключение остальных раскладок. Если бы исходники были опубликованы, вообще было бы изумительно.]
[Update. Вернулся к «велосипеду» с переназначенным CapsLock. Иначе иногда CapsLock все-таки умудряется включиться, причем его вырубить потом целая история...]



Итак, приступим.

Шаг 1. Бесполезную клавишу CapsLock преображаем в правый Ctrl (RCtrl). Почему в него? Потому что безобидная клавиша, редко используется, никому не мешает.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,1d,e0,3a,00,00,00,00,00


После импорта reg-файла требуется перезагрузка.

Шаг 2. Ставим AutoHotKey

Шаг 3. Пишем скрипт (назовем его, к примеру, keyboardLayout.ahk). Этим вариантом пользуюсь сейчас:

en := DllCall("LoadKeyboardLayout", "Str", "00000409", "Int", 1)
ru := DllCall("LoadKeyboardLayout", "Str", "00000419", "Int", 1)

~<+RControl::SetLayout(ru)
~>^LShift::SetLayout(ru) 
~RControl::SetLayout(en) 

#Space::ChangeLayout() 
!Space::ChangeLayout() 

SetLayout(language)
{
  ControlGetFocus, control, A
  PostMessage 0x50, 0, %language%, %control%, A ; WM_INPUTLANGCHANGEREQUEST
}

ChangeLayout()
{
  PostMessage 0x50, 2,,, A ; WM_INPUTLANGCHANGEREQUEST
} 

Скрипт, или ссылку на него, подкладываем в автозагрузку.
Все, можно пользоваться (чтобы не перегружаться еще раз, можно кликнуть по скрипту двойным кликом — AHK его загрузит).

Английский в данном случае подключается по CapsLock или RCtrl, теперь все равно. Русский по Ctrl+Shift и Shift+Ctrl. Циклическое переключение всех установленных в системе языков (не исключая русский с английским) — по Alt+Space или Win+Space. Можно было оставить штатное виндовое циклическое переключение, но с Ctrl — описанная выше ноутбучная проблема, а по Alt+Shift мне вслепую попадать удавалось в лучшем случае через раз.
P.S. В качестве последней попытки использовать штатный переключатель раскладок Windows было: Ctrl+1 — английский, Ctrl+2 — русский (остальное в цикле стандартной комбинацией). Неудобно. Вслепую не попадаю.
Потом довольно долго использовал keyla. Все устраивало, только под Win7-64bit работает нестабильно. Так что пока пользуюсь самоделкой.
Tags:
Hubs:
+2
Comments 35
Comments Comments 35

Articles