Переключения языка ввода в 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 (0x3a) эмулировать нажатие на Ё (0x29). Вторая тоже примерно понятна — для того, чтобы всё-таки оставить функциональность капса, требуется переназначить на него какую-нибудь ненужную клавишу. В моём примере этой клавишей оказался ScrolLock (0x46). А вот третья перестановка отвечает за спасение буквы Ё. Для этого хитрого кода нам нужна «ненужная клавиша» с текстовой клавиатуры, Pause/Break не подойдёт. Однако, тут нам повезло. Даже на полностью задействованной русскоязычной раскладке клавиатуры есть дублирующиеся клавиши:

russian keyboard.png

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

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

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


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

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

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


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

language-general.png

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

Приложение


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

Примечание


Проверено на win7 и win10. На 10-ке использовались уже скомпилённые проекты, ссылка на которые дана выше.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 79

    0
    Способ для ламеров — усановить PuntoSwitcher. А вдруг кому-то понадобится за вашим ПК поработать? В PS хоть быстро вернуть можно, а в Вашм варианте — кроме Вас никто знать не будет как обратно вернуться.
      0
      да, пунто срабатывает. именно поэтому раньше у меня не возникало такой проблемы. Но на новом месте работы пунто под запретом, увы.
        –2
        По-поводу изменений в реестр — да, увы, это затрагивает всех пользователей (хотя я не проверял). Но я и не претендую на универсальность — просто ещё один способ решения проблемы плюс собрал вместе полезную информацию.
          –2
          А что за место? (ненароком бы не вляпаться)
            0
            Присоединяюсь к вопросу
            0
            Попробуйте everylang, программа имеет подобный функционал что и в Punto Switcher, плюс дополнительные плюшки.
            +1
            А вдруг кому-то понадобится за вашим ПК поработать? В PS хоть быстро вернуть можно, а в Вашм варианте — кроме Вас никто знать не будет как обратно вернуться.

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


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

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

              Кроме того есть совет актуальный для владельцев MS Nature 4k. В комплекте с клавиатурой шла утилитка, которая позволяла переопределять клавиши. Правда это было 9 лет назад, как сейчас дела я не знаю.
                0
                Если система настолько загружена, что курсор мыши еле ползёт с интервалом в полминуты, или рабочего указательного устройства вообще нету — Menu весьма и весьма полезен.
                  0
                  Эта кнопка почти всегда доступна по Shift+F10
              0
              Тоже пользуюсь Punto (для переключения по CapsLock и быстрого исправления неправильно набранного текста), но достаёт, что он иногда переходит в режим CapsLock, а как его вернуть назад, я так и не нашёл. Пробовал включать настройку «Использовать ScrollLock вместо CapsLock», но в результате ScrollLock тоже переключает раскладку. Может, подскажет кто, как в этом случае переключить CapsLock?
                0
                Возможно Shift+CapsLock?
                  0
                  Если бы. Просто переключает язык. Я уже всё перепробовал. Спасает только закрытие ПС, переключение по-старому и снова запуск.
                  0

                  Я написал простейшую программку на C# :) (ну т. е. что было под рукой — на том и написал). (Хотя я пользовался способом, описанным в статье, а не пунто, но при работе с виртуалками иногда неожиданно оказывается включён капс, а замапить скроллок, как сделал автор, я не догадался.)

                  0
                  Capslang миниатюрная тулза решающая задачу из статьи. Юзать пунто и аналоги только для переключения раскладки по капсу это оверкилл.

                  Что интересно у меня версия Capslang от 2011 года прекрасно работает в вин10, хоть на сайте автор пишет что работать не должна.
                    0
                    «А вдруг кому-то понадобится за вашим ПК поработать?»
                    Зачем это?
                    +3
                    Recaps же
                      –1
                      g_hHook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelHookProc, GetModuleHandle(NULL), 0);
                      

                      ну то есть совсем другой подход, чем я предлагаю. Через хуки-то любой сможет ;)
                        0
                        Увы, Recaps не работает на Win10 (возможно и 8 — не проверял) в Modern приложениях.
                          0
                          В win10 работает Win+Space
                            0
                            да, увы. возможно необходимо использовать какое-то другое апи для перехвата нажатий в метро-приложениях? в 8ке и 8.1 тоже не работал, да
                          –1

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

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

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


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

                                Самого же в первую очередь привлёк очень маленький размер (5 КБ)
                                  0
                                  ок. постараюсь опробовать. спасибо за рекомендацию!
                                    0
                                    Например, в Excel (офис 2010), при нажатии на стрелки, происходило перемещение области видимости, вместо перемещения курсора (при включенной кириллице). Невозможно переключить раскладку через CapsLock в системных диалоговых окнах (сохранение файла, например) — приходилось переключать мышкой в панели. Были и ещё какие-то проблемы, сейчас уже и не помню всё. Ну и хотелось одной глобальной раскладки на все приложения, а так получалось много «весёлостей», вплоть до изменения языка в скайпе при удалении символа, либо при перемещении курсора (и это не разовые проблемы, оно могло происходить десятки раз за очень короткое время). И про все эти проблемы забыл после того, как перешёл на раскладку из поста, упомянутого ниже.
                                    0
                                    Тут скорее недостаток другой: если зайти пор RDP на компьютер, где тоже запущен caps-min.exe, и в начальный момент времени включены разные раскладки, то реакция на Caps Lock будет неоднозначна: иногда переключается раскладка на локальном компе, но не удалённом; иногда — наоборот, а иногда вообще ничего не происходит.
                                    Рецепт — мышкой выбрать на обоих хостах одну и туже раскладку.
                                  0
                                  Для тех, у кого стоит Punto Switcher — там эта функция есть в настройках переключения. Работает вроде корректно…

                                  Блин! Даже прочитав комментарии, не успеешь не написать одинаковый…
                                    0
                                    я в курсе. пользовался именно этой фичей. но вот у нас в конторе пунто == харам.
                                    +1
                                    AutoHotKey (https://autohotkey.com/) — кроме этого можно настраивать практически все что угодано через собственные скрипты.
                                      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


                                        +1
                                        у меня так работает.
                                        CapsLock::Send, {Alt Down}{Shift}{Alt up}

                                        CapsLock включается через Shift+CapsLock.
                                          0
                                          Иногда почему-то CapsLock срабатывает как CapsLock, и потом приходится отключать AHK, чтобы отключить режим CapsLock.

                                          А буква Ё во встроенной в Windows раскладке TypeWriter справа снизу, левее правого шифта — пользуюсь этой раскладкой уже лет десять, оказалась намного удобнее дефолтной, так как кроме удобного положения буквы Ё ещё и точка и запятая находятся на разных клавишах и вызываются без шифта.
                                            0
                                            Уже больше года пользуюсь таким AHK скриптом

                                            1. Alt+Caps включает стандартную функцию капслока
                                            2. Caps переключает на английский
                                            3. Правый Alt — на русский

                                            !Capslock::Capslock
                                            Capslock::f(0x4090409) ; включение английского
                                            RAlt::f(0x4190419) ; включение русского
                                             
                                            f(p)
                                            {
                                               ControlGetFocus, sCN, % "A"
                                               PostMessage, 0x50,, p, % sCN, % "A"
                                            }
                                            


                                            Для себя я пришёл к выводу, что циклическое переключение (не важно по какой клавише) всё равно неудобно — надо либо помнить последнюю раскладку, либо постоянно переводить взгляд в угол экрана. Гораздо удобнее нажать и сразу же начинать писать.

                                            Работает отлично, но, увы, не всегда, в некоторых модальных окнах приходится переключаться по оставленной для совместимости комбинацией Alt+Shift.
                                              0
                                              Кажется пробовал похожее на ваше решение, в том-то и дело, что иногда не срабатывало, жутко бесило. А насчет циклического переключения — есть смысл освоить слепой набор, сразу будете видеть, что набираете, заодно вырастет скорость набора и глаза меньше уставать будут.
                                                0
                                                А насчет циклического переключения — есть смысл освоить слепой набор
                                                Дык владею им родимым, владею, но всё равно пока успеваю осознать что пишу не в той раскладке – успеваю вбить целое слово или даже два. Затем остановка, BS-BS-BS...BS, <переключение>, <проверка_что_переключение_успешно> снова пишем. На фоне моей скорости печати вот эти действия от отмене забирают довольно много времени и мыслительных сил.
                                          0

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


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

                                            0
                                            хм… А что вы подразумеваете под MLC?
                                              0

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

                                                +1
                                                ну дык больше подробностей! Вам удалось сделать переключение по капсу средствами одной только раскладки?
                                                  +3

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


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

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

                                            0
                                            интересный пост. спасибо!
                                              0
                                              Как раз на этот способ перешёл с Capslang. Единственная проблема, с которой столкнулся — в Xamarin Studio 5 вместо переключения раскладки происходит переключение регистра (как понимаю, следствие каких-то собственных особенных методов работы с клавиатурой XS, из-за чего также уже много лет не могут также починить баг с буфером обмена на Windows). Во всех остальных местах, где с Capslang были проблемы, всё стало работать нормально.
                                              +1
                                              Костыли какие-то. Я просто в автозагрузку lswitch.exe 20 (гуглится) поставил и радуюсь. А пунто ещё и забывает переключать иногда, и тогда капс залипает во включенном состоянии.
                                                0
                                                Спасибо, действительно крохотулька меньше 5 Кб, и прекрасно работает.
                                                Думаю, не грех дать ссылку на сайт с утилитой:
                                                https://haali.su/winutils/
                                                Use any key to switch input languages, usage: lswitch [keycode]. Keycode is optional and defaults to context menu key. Another good candidate is a CapsLock key with a keycode of 20.
                                                  0
                                                  Извините за нубский вопрос — а как его запустить с настройкой на капс? Пробовал в консоли и lswitch 20 и lswitch.exe 20 результата ноль.
                                                    0
                                                    Прошу прощения, разобрался
                                                  +3
                                                  А может меня кто-то просветить, чем не устраивает обычный Ctrl+Shift?
                                                  Или я не понял о чем идет речь, но никаких проблем с Putty, никаких проблем с виртуальными машинами, никаких проблем с удаленными машинами по rdp/citrix/etc…

                                                    –1
                                                    тем, что при работе с несколькими виндами надо гадать: где-то альт+шифт, где то — кантрол+шифт, а если раскладок не две а три… Это отдельная, непонятная печатающим только на ру/англ боль. Ибо где-то может быть ру-укр-анг, а где то ру-анг-укр…
                                                      +1
                                                      А это тут причем? Или CAPS автоматом вдруг настраивается на всех виндах сам?
                                                      Ctrl+Shift и одинаковые раскладки настраиваешь на всех своих виндах и все.
                                                        +1
                                                        Тоже не понимаю зачем все это. Тем более привыкнешь к нестандартной, потом сел за другой комп — напряг. Я своих юзеров всех на Alt+Shift пересадил, и не важно какая винда, сколько языков.
                                                      0

                                                      Кому как. Меня не то что бы не устраивает, просто Caps Lock устраивает больше, т.к. это одна клавиша вместо двух, и ей соответствует светодиодный индикатор, видимый периферическим зрением (важно для моего "полуслепого" набора). К тому же, её обычная функция для меня бесполезна.

                                                        0
                                                        увы, но мой вариант не переключает светодиодный индикатор :(
                                                        0
                                                        Тем, что иногда, по разным причинам (буква нажата не до момента срабатывания, в последний момент передумали и т.п.), при нажатии горячих клавиш (ctrl+shift+...) получается случайная смена языка ввода.
                                                          0
                                                          Caps можно мизинцем нажать. Как следствие даже руку минимально сдвигать не надо. А по назначению её почти никто не использует, ибо нужно это было во времена механических печатных машин.

                                                          В линухе также есть вторая по популярности идея использования Caps: поменять местами Caps и Ctrl.
                                                          +1
                                                          На маке я сделал себе свою раскладку в которой на капсе висит русский алфавит, а без — английский. Светодиод на капсе работает как дополнительный индикатор раскладки.
                                                            0

                                                            А заглавные буквы при этом нормально с шифтом набираются?

                                                          0
                                                          By default, Left Alt + Shift работает везде, в том числе и на трех языках
                                                            0
                                                            Задам, вероятно, глупый вопрос — если капслок, то без вечноверхнего регистра(с трудом помню, что бы я это использовал, но всё же)? Просто сам давно ищу что-нибудь на замену ctrl+Shift, в kde вечно проблемы с этим были, перешел на alt+shift, появились проблемы в win.
                                                              0
                                                              А кто-то вообще сейчас использует Caps Lock «по назначению»? Я им не пользуюсь уже очень давно. Только бывает мешает, когда случайно нажму на него. Идея использования его для переключения раскладки кажется мне отличной.
                                                                0
                                                                До этой статьи я как-то не задумывался на тему его использования, действительно только мешает.
                                                              0
                                                              Давным-давно сделал свой костыль LangSwitch bitbucket.org/master_groosha/langswitch/src

                                                              Из особенностей: сделано на Autohotkey, поддерживаются все варианты переключения (эмулируется тот, который установлен в системе, т.е. Ctrl+Shift, Alt+Shift, Grave Accent и т.д. Инфа берется из реестра).

                                                              Иконки в трее и возможность временно приостановить скрипт.
                                                                0
                                                                получать удвоенное удовольствие от слепой десятипальцевой печати
                                                                Клавиш для ввода аббревиатур является неотъёмлемой частью слепого десятипальцевого метода набора. Прыжки по Shift'ам, замедляющие набор — ересь. А переключение раскладок, раз уж оно айтишникам так часто необходимо, можно повесить на однократное нажатие какого-нибудь модификатора. Например, одного из Alt/Option, которые находятся под малозагруженными большими пальцами и значительно не «гуляют» на разных клавиатурах.
                                                                  0
                                                                  Alt'ом много где вызывается меню, так что не вариант. Вводить заглавные аббревиатуры лично мне приходится крайне редко, и на этот случай можно как раз включить CAPS другим сочетанием (на Linux, например, у меня для этого используется Shift+CAPS). Хотя я, кажется, набираю их все равно с Shift'ом
                                                                    0
                                                                    Меню можно вызывать по оставшемуся Alt.
                                                                  0
                                                                  Я пробовал несколько решений, назначающих Caps Lock на переключение языка, и все в конечном итоге приводили к тому, что в какой-то момент рано или поздно я обнаруживал, что всё пишется в залипшем Caps Lock, который вот так вот запросто не отключить, так как на нём висит другая функция. В общем перестал трогать Caps Lock и остался на Ctrl+Shift.
                                                                    0
                                                                    Для этого капслок сначала переназначается на другую клавишу, например, F13, а к ней уже прикручиваются нужные скрипты.
                                                                    0
                                                                    Зачем велосипед, если есть F1-F12 ??? Так же есть редко используемые Scroll lock и атавизм Pause break ??
                                                                      0
                                                                      Долго работал с CapsLock, но когда начал учить испанский, понял, что циклическое переключение раскладок — это зло. В итоге для английского стоит Ctrl+1, для испанского Ctrl+2, для русского Ctrl+3. И никакой путаницы никогда.

                                                                      Настроить эти же хоткеи под убунтой оказалось нетривиальной задачей в сравнении с Windows, но и там в итоге все заработало.
                                                                        0
                                                                        Мне нравится вариант раскладки когда LShift — английский, RShift — русский. Переключение срабатывает только если нажать и отпустить shift без какой-либо другой кнопки, что в обычном состоянии не имеет какого-либо эффекта. Хорошо тем что не надо знать текущую раскладку когда хочешь что-то набрать: нажимаешь нужный шифт и вперед. Есть программы которые это позволяют настроить такую раскладку (https://github.com/razaraz/keyla например), однако не всегда все гладко работает к сожалению.
                                                                          0
                                                                          хорошая идея
                                                                          0
                                                                          LCtrl — английский, RControl — русский, Caps — украинский (ну вот тут по кругу, просто украинский — не получается, а жаль) в Пунто. Авто — офф. Вроде все работает.

                                                                          Only users with full accounts can post comments. Log in, please.