Начальная страница

Переопределение клавиш

Задача

Иногда возникает желание переместить или отключить какие-то кнопки клавиатуры. Мысль, сделать это физически, не всегда плодотворна, хотя я встречал советы, выломать Caps Lock или Ins. Функциональность компьютерной клавиатуры в определенных пределах можно подогнать и софтверным путем. Начиная с Windows 2000 (включая XP, Vista и 7), существует возможность переопределения или отключения клавиш, для чего необходимо внести специальную запись в системный реестр Windows.

Софт и решения
Спецсимволы – быстрый набор
Буфер обмена – всегда на виду
Картинки & Exif –
без инсталляции

Смотрим GIF-анимации как нам угодно

Плюс данного способа заключается в том, что изменения действуют для всех приложений, для самой Windows, в том числе в окне командной строки («консоль»). По понятным причинам функциональность клавиш при работе с BIOS не может быть изменена таким образом. Для сравнения, другие механизмы имеют более ограниченный «радиус действия»: макросы работают лишь внутри отдельно взятых прикладных программ; утилита ЮNIK преследует другую цель, а именно присвоение символьным клавишам произвольных символьных значений, со служебными клавишами она не работает

Важная оговорка: В то время как «ядро» механизма (стандартные клавиши, настройка всего компьютера целиком) работает единообразно, дополнительные функции требуют учета особенностей конкретной версии Windows и/или компьютера. Так описанная ниже перенастройка «валютных» клавиш ноутбуков фирмы Acer работает не во всех моделях. В некоторых версиях Windows возможно присвоение разных схем переопределения отдельным пользователям одного и того же компьютера.

Чаще всего необходимость в переопределении клавиш может возникать у пользователей ноутбуков. Особенность ноутбучных клавиатур заключается в том, что служебные клавиши часто располагаются по-разному. По этой причине могут возникать проблемы, например:
(1) При переходе с одного ноутбука на другой приходится переучиваться.
(2) Необходимо попеременно работать с несколькими компьютерами с разным рас­по­ложе­нием отдельных клавиш, например, на стандартной клавиатуре десктопа и нестандартной ноутбука.
(3) От приобретения неплохого ноутбука приходится отказаться по причине неудачного рас­положения всего лишь нескольких, но важных клавиш.

Как это делается

Типичная ошибка
В этом треде на «Волшебном форуме» используется неверный путь для размещения записи Scancode Map.

Необходимые изменения в реестр можно вносить разными способами. В частности, в Интернете находится (расположено & можно найти) некоторое количество программ, которые могут сделать это автоматически. Мы рассмотрим здесь правку реестра вручную, справиться с чем может, в принципе, почти любой мало-мальски знакомый с компьютером пользователь. Для этого запускаем программу regedit (Пуск/Start – Выполнить/Run – regedit). В реестре ищем позицию:

   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

Создаем здесь новую двоичную запись («двоичный параметр») под названием Scancode Map. Плавающее меню «Создать» и диалог для обработки двоичного параметра, показанные на картинках ниже, вызываются кликом правой кнопки мыши, соответственно внутри пустого пространства редактора реестра либо по имени параметра, который нужно изменить. Эти команды можно вызвать и через позицию «Правка» меню окна regedit.

Данная запись может быть отредактирована средствами regedit.

Она имеет строго предписанную структуру, описание которой может быть найдено на этой странице сайта Microsoft.

Cтруктуру данной строки можно пояснить на примере ниже, все числа – в шестнадцатеричной форме (hexadecimal):

00 00 00 0000 00 00 0004 00 00 0053 E0 52 E052 E0 53 E000 00 3A 0000 00 00 00
всегда нуличисло записейпервая заменавторая заменатретья заменавсегда нули
 Меняем местами Ins и DelОтключаем Caps Lock 

Группировки по две шестнадцатеричные цифры – 00, E0, 3A и т.д. – означают отдельные байты, знание чего пригодится нам чуть ниже. Промежутки введены исключительно для удобства восприятия человеком, ту же самую строчку можно записать следующим образом:

   00000000000000000400000053E052E052E053E000003A0000000000

Поле число записей содержит число полей по 4 байта (= 8 шестнадцатиричных цифр; = 32 бита), расположенных после этого этого поля, и равно числу замен + 1. Если строка Scancode Map создана, но ни одна клавиша не переназначена, то это поле должно содержать значение 1.

В более развернутом виде, число записей образуется путем суммирования следующих позиций:
(1: факультативно) число пар клавиш, обменивающихся своими функциями, * 2 +
(2: факультативно) число клавиш, получающих новые функции, но не отдающих свои +
(3: факультативно) число отключаемых клавиш +
(4: всегда) один (последняя цепочка нулей).
Например, если мы меняем местами Del и Ins, что требует две записи, а Caps Lock отключаем совсем, для чего нужна одна запись, то здесь нужно поставить число 04000000 (1*2 + 0 + 1 + 1).

Ключевую роль играют поля замена, содержащие т.н. скан-коды клавиш, которые генерируются клавиатурой. Скан-коды, как правило, состоят из одного или двух байт, хотя известны и более длинные комбинации. В реестре всегда должны быть указаны два байта (= 4 цифры), поэтому, если скан-код состоит из одного байта (= две цифры), то две недостающие цифры просто заменяются нулями. Сразу нужно указать на то, что порядок записи байтов в реестр обратный (т.н. little endian). Проиллюстрировать это лучше всего на примерах:

  • скан-код клавиши Enter: 1C; для получения двухбайтовой комбинации это число нужно предварить двумя нулями, итого получаем: 00 1С; при вставке в реестр нужно поменять порядок байт на противоположный: 1С 00
  • скан-код клавиши PgUp изначально содержит два байта: E0 49; следовательно, нам нужно лишь поменять их местами при записи в реестр: 49 E0

Каждое из полей первая и вторая замена содержат скан-коды двух клавиш. Вначале идут четыре цифры, означающие скан-код той клавиши, функцию которой данная физическая клавиша должна начать выполнять после переопределения. Последние четыре цифры означают первоначальный скан-код самой физической клавиши, что соответствует символу, который на нее нанесен. Еще раз обратим внимание: порядок пар цифр (= байтов), вводимых в реестр, должен быть обратным по сравнению со скан-кодом. Структура отдельной замены выглядит следующим образом:

0E 00   38 E0
0E 0038 E0
Новая функция переназначаемой клавиши – «Backspace» (скан-код: 0E или 00 0E)Изначальная функция переназначаемой клавиши – «Правый Alt» (скан-код: E0 38)

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

В случае, если клавиша просто отключается (третья замена), то вместо скан-кода новой функции ставятся четыре нуля. Например, запись для отмены (запрета, деактивации) клавиши Caps Lock будет выглядеть следующим образом: 0000 3A00.

Список скан-кодов, а также общую информацию об этом механизме применительно к операционным системам Windows можно получить из файла scancode.doc, который скачивается с сайта компании Microsoft. Так как этот файл содержит много другой информации и слегка устарел (он датирован 2000 годом), я сделал собственную таблицу скан-кодов для клавиатуры QWERTY. Бóльшую часть кодов я мог экспериментально наблюдать хотя бы у одного их моих компьютеров.

MD5: bf9cd7ae993c11301914fa19c548decd
SHA-1: d5e1e71c5d4f67c20fec9415acf78c9a8c1832e1

Можно воспользоваться и простой утилитой KeyCode.exe. Для вставки в реестр используется шестнадцатеричное значение из левого поля в сегменте Scan Code initially. В сегменте Scan Code reaching your Application показывается значение скан-кода после переопределения. Если такового нет, то соответствующие – шестнадцатеричные (слева) и десятичные (справа) – значения обоих сегментов должны совпадать. Утилита работает описанным образом для подавляющего большинства стандартных клавиш. Дополнительные технические детали относительно работы KeyCode.exe и скан-кодов приведены на этой странице.

После изменения реестра компьютер необходимо перезагрузить либо выйти/войти с завершением сеанса текущего пользователя.

Если эксперименты оказались неудачными и путеводная звезда потеряна, то позицию Scancode Map можно просто-напросто стереть. Ниже приведены два примера из практики, когда переопределение клавиш оказалось полезным.

«The Application key can be located wherever it appropriately fits.»
Microsoft

В какой-то момент развития компьютеростроения стандартная клавиатура показалась скучноватой и компания Microsoft решила обогатить ее двумя (или тремя, как считать) новыми клавишами. Одной из них стала клавиша Application, назначение которой заключалось в вызове контекстного (= плавающего) меню. Однако, так как пользователи привыкли вызывать это меню правой кнопкой мыши, популярность новой клавиши оказалась скромной. Отказаться от нее совсем было нельзя, иначе такая клавиатура не прошла бы тест на Windows-совместимость и не смогла бы носить гордый предикат Designed for Windows YX, а вот отправить куда-нибудь на периферию, можно было вполне, тем более что на это было дано явное разрешение самим Майкрософтом. Для сравнения, подобная вольность в отношении другой новой кнопки (или кнопок) с логотипом Windows не приветствовалась, ее следовало располагать поблизости от вспомогательных, но важных клавиш Ctrl, Alt и Shift.

Большинство производителей не воспользовались великодушием поставщика ОСов и слепо влепили кнопку Application туда, где ее нарисовали программисты из Редмонда, т.е. между правыми Alt и Ctrl. Иным был подход компании Toshiba, которая отправила Application в крайний правый угол, а ценное место заняла кнопками |, Ins и Del. Насчет правильности решения в отношении первых двух не уверен, а вот расположение Del в районе между клавишей Space (Пробел) и блоком стрелочных клавиш мне понравилось. В итоге чего на своем новом ноутбуке, пришедшем на смену Тошибе, я присвоил кнопке Application функцию Delete. Заодно, клавиши Ins и Del оказались разнесенными, что тоже является положительным эффектом.

Скан-код клавиши Application – E0 5D; Del – E0 53. Следовательно, строчка для обмена функциями будет выглядеть следующим образом:

   00000000 00000000 03000000 5DE053E0 53E05DE0 00000000

Зачем нам валюта?

При разработке своих ноутбуков фирма Acer проявила чудеса инновативности (или все же инновационности?) и ввела в блоке «стрелочных» клавиш две отдельные кнопки для валютных единиц: € и $. Лично мне оба этих знака нужны нечасто. А вот против того, чтобы рядом с четырьмя стрелочными клавишами находилась пара других для управления курсором, например, Home и End, я ничего не имею. Кстати, именно таково конструктивное решение в некоторых ноут- и нетбуках, например, LG X110. Интересно отметить, что хотя этот нетбук и производится на основе MSI Wind, но его клавиатура представляет собой специальную разработку: Это касается не только разумного расположения клавиш, но и прекрасных механических характеристик; на мой взгляд клавиатура LG X110/130 на текущий момент является одной из лучших в классе нетбуков.

Скан-код клавиши «евро» – E0 33; «доллар» – E0 34. Следовательно, строчка для присвоения обеим клавишам значений Home и End, соответственно, будет выглядеть следующим образом:

   00000000 00000000 03000000 47E033E0 4FE034E0 00000000

Замечание: Для получения нужного эффекта при переназначении «валютных» клавиш в ноутбуках фирмы Acer, загружаемая по умолчанию утилита Launch Manager должна быть выгружена. Если по каким-то причинам вы не можете пойти на этот радикальный шаг, то в файле mmkeybd.cfg (расположенном в директории программы, скорее всего, C:\Program Files\Launch Manager) нужно закомментировать соответствующие строчки (номера клавиш в начале строк могут быть другими, ориентироваться при поиске следует на скан-коды и комментарии; клавиша Dollar Symbol может называться Money Symbol):

;Key 23 = 1,E0,33,E0,B3,F508,Euro Symbol
;Key 24 = 1,E0,34,E0,B4,F509,Dollar Symbol

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

В ноутбуках фирмы Toshiba Launch Manager называется Easy Button, а соответствующий конфигурационный файл находится в директории этой программы C:\Program Files\EzButton и может называться ezbutton.cfg или cpldbl10.cfg.

Коварная Fn-кциональность

Разное
Я и 30 тыс. других пользователей моего компьютера
Печать времени, или веб-дизайн ушедших эпох

В ноутбучных и малогабаритных клавиатурах используется клавиша Fn. Как правило, она находится справа от левого Ctrl. У ноутбуков Lenovo – наоборот. В некоторых ноутбуках, например, lenovo x100e в BIOS’е есть настройка, позволяющая поменять левый Ctrl и Fn местами. Техническая реализация клавиши Fn отличается от других и привязана к «железу», а не к операционной системе, а это означает, что механизм переопределения с помощью записи в реестр Windows здесь не поможет. Поэтому, хотя эта клавиша и может генерировать скан-код – неодинаковый у разных моделей ноутбуков –, ее полноценное переопределение с помощью записи в реестр, как подтвердили эксперименты, невозможно. Даже если клавише Fn присвоить какое-то другое значение скан-кода, и она будет выполнять соответствующую ему новую функцию, свою прежнюю функциональность она при этом не потеряет. Аналогично, если присвоить скан-код клавиши Fn какой-то другой, это не приведет к тому, что эта другая клавиша начнет выполнять функции Fn.

Вместе с тем, я допускаю, что в каких-то моделях ноутбуков (которые можно назвать «100 проц. Win-book») или клавиатур такое переназначение все-таки возможно, поэтому стоит, как минимум, попробовать. Скан-код клавиши Fn может быть определен с помощью представленной выше утилиты KeyCode. Последующее ничем не отличается от переназначения других клавиш.

* * *

Внимание: Манипуляции с системным реестром могут привести к сбоям в работе с компьютером! Автор данной страницы не несет ответственности за вызванные тем самым проблемы.

 

Copyright А. Г. Румянцев, 2010/2019 MailBox