[Из песочницы] Переключения языка ввода в Windows с помощью CapsLock

Предлагаемый мной способ не является чем-то уникальным и/или неизвестным. В любой из двух поисковых системы вы легко найдёте множество заметок о том, как настроить в Windows переключение языка ввода с помощью любой кнопки клавиатуры, прямо как в Linux, только чуть сложнее и с перезагрузкой. Однако, я так и не нашёл (тут можно меня поправить и предложить в комментариях ссылку) готовой инструкции, включающей в себя и такой немаловажный пункт, как спасение буквы Ё, а равно и обратного апострофа с тильдой. Таковую инструкцию я вам и предлагаю.

Суть проблемы


ОС Windows 7 предоставляет пользователю долгожданную возможность переключать языки ввода по обратному апострофу:

Hot keys for input languages.png

Казалось бы, удобно, но нет. Лично я вижу следующие недостатки:

  1. маленькая клавиша
  2. на домашней Linux-машине всё-таки CapsLock настроен
  3. пропала буква Ё
  4. пропала тильда и обратный апостроф

Для тех, кто как и я, обречён ходить на develop/production сервера с использованием PuTTY, потеря тильды и обратного апострофа весьма чувствительна. Я не выдержал и месяца, хотя, казалось бы, как легко запомнить Alt+126 и Alt+96. Надо что-то делать!

Меняем скан-коды


Решение для переключения раскладки по CapsLock — это переопределение скан-кодов через реестр. Есть множество описаний как это сделать. Я могу предложить прочитать одно из них по ссылке: www.howtogeek.com.

Готовый результат выглядит вот так (файл SwitchLangByCaps.reg):

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,04,00,00,00,29,00,3a,00,3a,00,46,00,56,00,29,00,00,00,00,00

Как можно видеть, в реестре прописывается одно или несколько правил подмены вида:

<что выдавать, если><пришёл такой сканкод><что выдавать, если><пришёл такой сканкод>...

Так что нам надо распланировать алгоритм перестановки. Первая перестановка очевидна — по нажатию CapsLock (0×3a) эмулировать нажатие на Ё (0×29). Вторая тоже примерно понятна — для того, чтобы всё-таки оставить функциональность капса, требуется переназначить на него какую-нибудь ненужную клавишу. В моём примере этой клавишей оказался ScrolLock (0×46). А вот третья перестановка отвечает за спасение буквы Ё. Для этого хитрого кода нам нужна «ненужная клавиша» с текстовой клавиатуры, Pause/Break не подойдёт. Однако, тут нам повезло. Даже на полностью задействованной русскоязычной раскладке клавиатуры есть дублирующиеся клавиши:

russian keyboard.png

Вот эта кнопка в левом нижнем углу и подойдёт на роль замены букве Ё, а равно и тильде с обратным апострофом. Имеет она сканкод 0×56 и отсутствует на большинстве клавиатур, так что именно её будем эмулировать при нажатии на Ё-кнопку.

На этом этапе можно произвести изменения в реестре и отправить машину в перезагрузку.

Добавляем раскладки


Как несложно догадаться, после перезагрузки вместо буквы Ё мы получим косую черту. Для исправления ситуации, требуется поправить имеющуюся клавиатурную раскладку. Редактировать раскладки клавиатуры можно посредством утилиты Microsoft Keyboard Layout Creator 1.4. Использование программы несложно — загружаем исходную клавиатуру из списка, делаем изменения (меняем символы клавиши 0×56 на требуемые буквы Ёё), сохраняем source-файл и собираем установочный пакет из меню Project.

Ту же операцию следует проделать и с английской клавиатурой, изменив поведение обратного слэша на обратный апостроф и тильду.
В результате должны получиться две папки с установочным пакетом для клавиатурной раскладки. Выполняем установку каждой, запуская setup.exe и переходим к следующему шагу.

Настройка раскладок


Открываем «языковые настройки». Для начала, выставьте переключение раскладок по Grave accent, как показано на первой картинке этой статьи. Затем добавьте только что установленные раскладки: US-Custom и Russian-Custom. И наконец, установите дефолтный ввод через US-Custom. Это необходимо, так как раскладку US удалить не получится, но в этом тоже есть плюс — теперь при смене языка ввода меняется размер значка в трее и гораздо легче заметить, попал ли ты по CapsLock или промахнулся. Результат должен выглядеть как-то так:

language-general.png

Если всё прошло удачно, то вы получили возможность переключения языков ввода по CapsLock, не поплатившись за это ничем существенным. Можно спокойно покупать в офис и на работу одинаковые клавиатуры и, не задумываясь больше над алгоритмом переключения, получать удвоенное удовольствие от слепой десятипальцевой печати.

Приложение


Готовые проекты раскладок, их исходники и патч к реестру можно найти по ссылке: Я.Диск.

Комментарии (29)

  • 14 июля 2016 в 11:45

    0

    Способ для ламеров — усановить PuntoSwitcher. А вдруг кому-то понадобится за вашим ПК поработать? В PS хоть быстро вернуть можно, а в Вашм варианте — кроме Вас никто знать не будет как обратно вернуться.
    • 14 июля 2016 в 11:49

      0

      да, пунто срабатывает. именно поэтому раньше у меня не возникало такой проблемы. Но на новом месте работы пунто под запретом, увы.
      • 14 июля 2016 в 11:53

        0

        По-поводу изменений в реестр — да, увы, это затрагивает всех пользователей (хотя я не проверял). Но я и не претендую на универсальность — просто ещё один способ решения проблемы плюс собрал вместе полезную информацию.
      • 14 июля 2016 в 11:58

        –3

        А что за место? (ненароком бы не вляпаться)
        • 14 июля 2016 в 15:04

          0

          Присоединяюсь к вопросу
    • 14 июля 2016 в 12:00

      0

      А вдруг кому-то понадобится за вашим ПК поработать? В PS хоть быстро вернуть можно, а в Вашм варианте — кроме Вас никто знать не будет как обратно вернуться.

      Ну, для тех, кто считает, что единственно правильный способ переключения раскладок существует и способ этот — CapsLock, это даже плюс. А вообще в новых виндах есть способ универсальный и работающий на всех чужих компах — Win+Space.


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

      • 14 июля 2016 в 13:15

        0

        Можно ещё клавишу контекстного меню использовать — ей редко пользуются по назначению. Я правда не знаю возможно ли это в Windows, но если влезть в скан коды, как в статье, то врятли возникнут проблемы.

        Кроме того есть совет актуальный для владельцев MS Nature 4k. В комплекте с клавиатурой шла утилитка, которая позволяла переопределять клавиши. Правда это было 9 лет назад, как сейчас дела я не знаю.

  • 14 июля 2016 в 11:46

    +2

    Recaps же
    • 14 июля 2016 в 12:47

      0

      g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelHookProc, GetModuleHandle(NULL), 0);
      

      ну то есть совсем другой подход, чем я предлагаю. Через хуки-то любой сможет ;)
    • 14 июля 2016 в 15:04

      0

      Увы, Recaps не работает на Win10 (возможно и 8 — не проверял) в Modern приложениях.
  • 14 июля 2016 в 11:51

    0

    Большое спасибо за статью! (Сам хотел такую написать. Не успел.)

    • 14 июля 2016 в 11:55

      0

      сам удивлён, что нашёл время :)
  • 14 июля 2016 в 11:55

    0

    Попробуйте посмотреть в сторону Capslang (http://flydom.ru/capslang/). Сам пользуюсь версией caps-min.exe на Win 7 больше полугода. Пока недочетов не выявил
    • 14 июля 2016 в 11:55

      0

      Недостатки:

      Не переключает раскладку в некоторых программах

      собственна вот…

      • 14 июля 2016 в 12:09

        0

        Я потому и написал, что «недочетов не выявил». За полгода не встретился с таким приложением, в котором были бы проблемы с переключением раскладки. Пользуюсь офисным пакетом от Microsoft, Visual Studio 2013 + дополнительные инструменты для C#/JavaScript/SQL, различные мессенджеры и тулы для конференц связи и т.п. Но всё зависит от используемых приложений.

        Самого же в первую очередь привлёк очень маленький размер (5 КБ)

        • 14 июля 2016 в 12:11

          0

          ок. постараюсь опробовать. спасибо за рекомендацию!
  • 14 июля 2016 в 11:56 (комментарий был изменён)

    0

    Для тех, у кого стоит Punto Switcher — там эта функция есть в настройках переключения. Работает вроде корректно…

    Блин! Даже прочитав комментарии, не успеешь не написать одинаковый…

    • 14 июля 2016 в 11:58

      0

      я в курсе. пользовался именно этой фичей., но вот у нас в конторе пунто == харам.
  • 14 июля 2016 в 12:27

    0

    AutoHotKey (https://autohotkey.com/) — кроме этого можно настраивать практически все что угодано через собственные скрипты.
    • 14 июля 2016 в 13:46

      0

      Ну и, собственно, готовое решение, к которому пришёл через кучу проб и ошибок. Дело в том, что много других решений рано или поздно срабатывали не так, как надо, только текущее решение всегда работает безупречно. Первым делом я переназначил CapsLock на другую клавишу, например, RAlt или F13, это можно легко сделать через SharpKeys. Теперь сам код AHK (для RAlt):

      RAlt::
      if (Key="1")
      return

      else
      SetKeyDelay -1
      Send {Blind}{Ctrl DownTemp}{Shift DownTemp}
      SetKeyDelay -1
      Send {Blind}{Ctrl Up}{Shift Up}{RAlt Up}
      return

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

      RAlt & WheelUp::
      Send {Volume_Up}
      return

      RAlt & WheelDown:
      Send {Volume_Down}
      return

  • 14 июля 2016 в 12:28

    0

    Еще лет 7 назад сделал в MLC раскладку «Английский — Русский». А потом и девушка перешла. (Правда она капс всё время не выключает, что меня привычного к всегда Английскому немного сбивает.)


    Punto switcher не люблю, так как в свое время нахватался с ним очень много глюков. (Справедливости ради в некоторых играх есть проблемы что с PS, что с раскладкой, но последние время такое всё реже)

    • 14 июля 2016 в 12:35

      0

      хм… А что вы подразумеваете под MLC?
      • 14 июля 2016 в 12:37

        0

        Извиняюсь, MKLC — Microsoft Keyboard Layout Creator, который на скриншоте в статье…

        • 14 июля 2016 в 12:39

          +1

          ну дык больше подробностей! Вам удалось сделать переключение по капсу средствами одной только раскладки?
          • 14 июля 2016 в 12:51

            0

            Ну да, просто забил в режим капса русские буквы… И в режиме caps+shift большие русские. (Подробностей не помню, так как было лет 7 назад, еще с XP)


            Всего одна раскладка. Где-то даже есть её инсталятор, если надо могу поискать.

            • 14 июля 2016 в 12:53

              0

              чорть, очевидная идея :)
  • 14 июля 2016 в 15:03

    0

    Если кому интересно, ещё один способ переключения по CapsLock — мне понравился тем, что переключатель глобальный для всех приложений, недавняя публикация habrahabr.ru/post/301882
    • 14 июля 2016 в 15:15

      0

      интересный пост. спасибо!
  • 14 июля 2016 в 15:04

    0

    Костыли какие-то. Я просто в автозагрузку lswitch.exe 20 (гуглится) поставил и радуюсь. А пунто ещё и забывает переключать иногда, и тогда капс залипает во включенном состоянии.

© Habrahabr.ru