Сначала должно идти 8 пар нулей подряд. Затем идет число (с ведущим нулем) – в данном случае 03, которое означает количество отслеживаемых клавиш плюс единица (т. е. в этом примере отслеживаем две клавиши). После него всегда должно идти три пары нулей (дополняя до 4-х пар цифр). Заканчиваться запись должна всегда четверкой пар нулей. А вот между ними мы должны записать столько четверок парных чисел, сколько мы предусмотрели клавиш для отслеживания – в данном случае две. В них записываются так называемые скан-коды клавиш, которые желаем отключить. В табл. 12.2 приведены коды тех клавиш, которые целесообразно рассматривать в плане кандидатов на отключение или замену (см. далее).
Эти коды записываются в последние две пары каждой четверки пар чисел, первые две пары опять же нули – как вы и видите в образце. Таким образом, приведенная в качестве примера строка отключит нам правую клавишу (с флажком Windows) (00 00 5C E0) и соседнюю клавишу вызова всплывающего меню (00 00 5D E0).
Таблица 12.2. Скан-коды клавиш
* Официальное название этой клавиши –
Что такое скан-коды и где их взять
Скан-код – это то число, которое выдает клавиатура при нажатии определенной клавиши. Скан-коды не следует путать с виртуальными кодами клавиш – последние формируются уже на уровне BIOS и Windows и в дальнейшем определяют коды символов, те самые, что, например, образуют содержимое текстовых документов. В большинстве случаев они никак между собой не связаны. Например, виртуальный код клавиши «пробел» – 32 (совпадает с кодом символа «пробел» в однобайтных кодировках), а скан-код ее – 57 (в HEX-форме это будет 20 и 39 соответственно). Заметьте, что виртуальные коды не эквивалентны символьным – чтобы превратить виртуальный код в код символа, надо еще учесть языковую раскладку, состояние клавиш , и, между прочим, используемую систему кодировок – однобайтную или Unicode. Все это проделывает системный драйвер клавиатуры еще до того, как событие нажатия попадает в очередь Windows-сообщений. Некоторые клавиши ( или ) вообще ни с какими символами не связаны и в указанную очередь не попадают. Поэтому для полной подмены функциональности некоей клавиши подменить виртуальные коды (что вообще-то может сделать любой, владеющий навыками программирования в Delphi или Visual C++) недостаточно – надо действовать на более глубоком уровне, манипулируя именно скан-кодами. Это и позволяет осуществить параметр Scancode Map в реестре Windows.
Для наших целей скан-коды, как вы можете догадаться по приведенной таблице, должны быть представлены в шестнадцатеричной (HEX), а не десятичной форме. Таблицы виртуальных кодов и кодов символов обычно прилагается к любому пособию по Windows-программированию, а вот полную таблицу скан-кодов разыскать непросто. Одна из таких таблиц находится на сайте «Электронная библиотека» по ссылке http://ntlib.chat.ru/ware/tables/scan.htm. Она немного неудачно составлена – так называемые расширенные клавиши (это те, у которых второй байт в нашей таблице равен E0) там показаны добавлением лишнего разряда, равного 1. То есть выбрав из колонки HEX скан-код, например, 11С (клавиша на цифровой клавиатуре), его надо для наших целей переписать как 1С E0. Официальный полный набор скан-кодов, включая и клавиши управления питанием (но исключая дополнительные медиаклавиши), можно скачать с сайта Microsoft. Ссылка на документ очень длинная, потому просто наберите в поиске на microsoft.com слова Keyboard Scan Code Specification», и получите искомое – правда, по-английски. При изучении этого документа учтите, что нас интересует только один набор кодов: Scan Code Set 1.
Разумеется, готовить такую строку чисел следует заранее и внимательно пересчитать все пары перед тем, как вводить ее в реестр. Но при вводе вы увидите, что вам помогут не наделать ошибок. Ввод значения двоичного числа осуществляется вручную (рис. 12.11), но несмотря на непривычный вид этого редактора, вы быстро убедитесь, что работать с ним очень удобно. В частности, не возникает проблем при подсчете вводимых пар – они автоматически группируются по восемь в строке. Не забудьте перезагрузить ПК после окончательного ввода значений параметра.
Рис. 12.11. Ввод значений двоичного параметра
Читать дальше
Конец ознакомительного отрывка
Купить книгу