Книга: 1001 совет по обустройству компьютера

12.7.4. Переназначение клавиш на клавиатуре

12.7.4. Переназначение клавиш на клавиатуре

На клавиатуре есть множество клавиш, которыми вы никогда не пользуетесь. Одна из самых надоедливых – клавиша <Caps Lock>, сохранившаяся со времен программистских языков типа Фортрана, где все писалось заглавными буквами. Редко кто пользуется и системными клавишами Windows (и основной, и для вызова контекстного меню) – это удобнее делать мышью. Между тем случайное нажатие этих клавиш тормозит всю работу. Те, кого это раздражает, могут отключить их или переназначить на другие функции – например, на соседние клавиши.

Рассмотрим на примерах эти действия, а потом расскажем, как это осуществляется в общем случае – для любой клавиши.

Сначала нужно в разделе реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSet ControlKeyboard Layout (не путать с Keyboard Layouts!) создать новый двоичный параметр (в меню так и будет написано – двоичный параметр), озаглавив его Scancode Map (с пробелом!), и присвоить ему значение по следующему образцу:

00 00 00 00 00 00 00 00

03 00 00 00 00 00 5C E0

00 00 5D E0 00 00 00 00

Эта строка отключит клавишу с флажком Windows и соседнюю клавишу вызова всплывающего меню. Разберемся в том, что здесь написано.

Сначала должно идти 8 пар нулей подряд. Затем идет число (с ведущим нулем) – в данном случае 03, которое означает количество отслеживаемых клавиш плюс единица (т. е. в этом примере отслеживаем две клавиши). После него всегда должно идти три пары нулей (дополняя до 4-х пар цифр). Заканчиваться запись должна всегда четверкой пар нулей. А вот между ними мы должны записать столько четверок парных чисел, сколько мы предусмотрели клавиш для отслеживания – в данном случае две. В них записываются так называемые скан-коды клавиш, которые желаем отключить. В табл. 12.2 приведены коды тех клавиш, которые целесообразно рассматривать в плане кандидатов на отключение или замену (см. далее).

Эти коды записываются в последние две пары каждой четверки пар чисел, первые две пары опять же нули – как вы и видите в образце. Таким образом, приведенная в качестве примера строка отключит нам правую клавишу <Win> (с флажком Windows) (00 00 5C E0) и соседнюю клавишу <PopUp Menu> вызова всплывающего меню (00 00 5D E0).

Таблица 12.2. Скан-коды клавиш


* Официальное название этой клавиши – &lt;Application&gt;

Что такое скан-коды и где их взять

Скан-код – это то число, которое выдает клавиатура при нажатии определенной клавиши. Скан-коды не следует путать с виртуальными кодами клавиш – последние формируются уже на уровне BIOS и Windows и в дальнейшем определяют коды символов, те самые, что, например, образуют содержимое текстовых документов. В большинстве случаев они никак между собой не связаны. Например, виртуальный код клавиши «пробел» – 32 (совпадает с кодом символа «пробел» в однобайтных кодировках), а скан-код ее – 57 (в HEX-форме это будет 20 и 39 соответственно). Заметьте, что виртуальные коды не эквивалентны символьным – чтобы превратить виртуальный код в код символа, надо еще учесть языковую раскладку, состояние клавиш <Shift>, <Caps Lock> и, между прочим, используемую систему кодировок – однобайтную или Unicode. Все это проделывает системный драйвер клавиатуры еще до того, как событие нажатия попадает в очередь Windows-сообщений. Некоторые клавиши (<Win> или <Caps Lock>) вообще ни с какими символами не связаны и в указанную очередь не попадают. Поэтому для полной подмены функциональности некоей клавиши подменить виртуальные коды (что вообще-то может сделать любой, владеющий навыками программирования в Delphi или Visual C++) недостаточно – надо действовать на более глубоком уровне, манипулируя именно скан-кодами. Это и позволяет осуществить параметр Scancode Map в реестре Windows.

Для наших целей скан-коды, как вы можете догадаться по приведенной таблице, должны быть представлены в шестнадцатеричной (HEX), а не десятичной форме. Таблицы виртуальных кодов и кодов символов обычно прилагается к любому пособию по Windows-программированию, а вот полную таблицу скан-кодов разыскать непросто. Одна из таких таблиц находится на сайте «Электронная библиотека» по ссылке http://ntlib.chat.ru/ware/tables/scan.htm. Она немного неудачно составлена – так называемые расширенные клавиши (это те, у которых второй байт в нашей таблице равен E0) там показаны добавлением лишнего разряда, равного 1. То есть выбрав из колонки HEX скан-код, например, 11С (клавиша <Enter> на цифровой клавиатуре), его надо для наших целей переписать как 1С E0. Официальный полный набор скан-кодов, включая и клавиши управления питанием (но исключая дополнительные медиаклавиши), можно скачать с сайта Microsoft. Ссылка на документ очень длинная, потому просто наберите в поиске на microsoft.com слова Keyboard Scan Code Specification», и получите искомое – правда, по-английски. При изучении этого документа учтите, что нас интересует только один набор кодов: Scan Code Set 1.

Разумеется, готовить такую строку чисел следует заранее и внимательно пересчитать все пары перед тем, как вводить ее в реестр. Но при вводе вы увидите, что вам помогут не наделать ошибок. Ввод значения двоичного числа осуществляется вручную (рис. 12.11), но несмотря на непривычный вид этого редактора, вы быстро убедитесь, что работать с ним очень удобно. В частности, не возникает проблем при подсчете вводимых пар – они автоматически группируются по восемь в строке. Не забудьте перезагрузить ПК после окончательного ввода значений параметра.


Рис. 12.11. Ввод значений двоичного параметра

Для не просто отмены, а еще и переназначения, придется немного усложнить запись – первые две пары нулей в тех четверках, что содержат коды отключаемых клавиш, заменить на те коды, которые должны, по вашему мнению, работать. Например, значение параметра Scancode Map, равное

00 00 00 00 00 00 00 00

03 00 00 00 00 00 5C E0

1D E0 5D E0 00 00 00 00

сделает так, что правая клавиша с флажком Windows отключится, а <PopUp> будет дублировать правый <Ctrl>, т. е. ближайшую к ней клавишу. Именно это значение Scancode Map приведено в качестве примера на рис. 12.11.

Покажем, как справиться с <Caps Lock>. Эксперименты показывают, что с ней не все однозначно – в частности, попытка простого отключения может не дать результатов. Но я приведу значение параметра Scancode Map, которое гарантировано отключает <Caps Lock> – ее функция меняется на функцию <Shift> (правого, но на практике это неважно), а <PopUp> здесь, как и ранее, дублирует правый <Ctrl>:

00 00 00 00 00 00 00 00

03 00 00 00 1D E0 5D E0

2A 00 3A 00 00 00 00 00

На прилагаемом диске в папке Registry находится файл key.reg, при запуске которого и подтверждении того, что вы действительно хотите внести изменения в реестр, автоматически создастся параметр Scancode Map с таким значением. Если не хотите трогать ничего, кроме <Caps Lock>, то отредактируйте это значение следующим образом: 03 замените на 02 и замените четыре байта с ненулевым значением во второй строке нулями.

Ничего фатального в результате этих ваших экспериментов произойти не должно – если вы в чем-то ошиблись или решили оставить все как есть, просто удалите из реестра параметр Scancode Map и перезагрузите компьютер. Или верните систему в исходное состояние с помощью точек восстановления.

Отключение клавиши <Alt>, как входа в меню

К сожалению, справиться с клавишей <Alt> как системной для Windows (вызова главного меню), сохранив ее функциональность как клавиши-модификатора, через реестр не получится – она вообще перестанет реагировать на нажатие. Потому, раз уж мы занялись клавишами, заодно укажу средство с ней справиться, хотя оно и не имеет отношения к реестру. На диске к книге имеется папка AltSpy, в которой размещена программа того же имени. Скопируйте всю папку (она содержит три файла) на жесткий диск и запустите файл с расширением js (сценарий на языке Java Script). Чтобы не запускать руками каждый раз, его следует включить в автозагрузку (см. разд. 10.1.3 «Автозагрузка»). Спустя 10 секунд после запуска сценария AltSpy создаст в области уведомлений кареглазый значок, у которого окажется единственный пункт контекстного меню – Закрыть. Пауза нужна для того, чтобы AltSpy гарантированно оказался самым последним при запуске и перекрыл другие службы. После этого <Alt> перестанет вызывать главное меню, зато сохранит свою основную функциональность. Возможность вызвать главное меню у вас при этом не пропадает – эту функцию по-прежнему выполняет клавиша <F10>, зато теперь куда труднее вызвать его случайно и тем самым сбить фокус ввода с нужного элемента.

Оглавление книги


Генерация: 1.426. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз