1001 совет по обустройству компьютера
Шрифт:
Рассмотрим на примерах эти действия, а потом расскажем, как это осуществляется в общем случае – для любой клавиши.
Сначала нужно в разделе реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Keyboard 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, которое означает количество отслеживаемых клавиш плюс
Эти коды записываются в последние две пары каждой четверки пар чисел, первые две пары опять же нули – как вы и видите в образце. Таким образом, приведенная в качестве примера строка отключит нам правую клавишу <Win> (с флажком Windows) (00 00 5C E0) и соседнюю клавишу <PopUp Menu> вызова всплывающего меню (00 00 5D E0).
* Официальное название этой клавиши – <Application>
Скан-код – это то число, которое выдает клавиатура при нажатии определенной клавиши. Скан-коды не следует путать с виртуальными кодами клавиш – последние формируются уже на уровне BIOS и Windows и в дальнейшем определяют коды символов, те самые, что, например, образуют содержимое текстовых документов. В большинстве случаев они никак между собой не связаны. Например, виртуальный код клавиши «пробел» – 32 (совпадает с кодом символа «пробел» в однобайтных кодировках), а скан-код ее – 57 (в HEX-форме это будет 20 и 39 соответственно). Заметьте, что виртуальные коды не эквивалентны символьным – чтобы превратить виртуальный код в код символа, надо еще учесть языковую раскладку, состояние клавиш <Shift>, <Caps Lock> и, между прочим, используемую систему кодировок – однобайтную или Unicode. Все это проделывает системный драйвер клавиатуры еще до того, как событие нажатия попадает в очередь Windows-сообщений. Некоторые клавиши (<Win> или <Caps Lock>) вообще ни с какими символами не связаны и в указанную очередь не попадают. Поэтому для полной подмены функциональности некоей клавиши подменить виртуальные коды (что вообще-то может сделать любой, владеющий навыками программирования в Delphi или Visual C++) недостаточно – надо действовать на более глубоком уровне, манипулируя именно скан-кодами. Это и позволяет осуществить параметр Scancode Map в реестре Windows.
Для наших целей скан-коды, как вы можете догадаться по приведенной таблице, должны быть представлены в шестнадцатеричной (HEX), а не десятичной форме. Таблицы виртуальных кодов и кодов символов обычно прилагается к любому пособию по Windows-программированию, а вот полную таблицу скан-кодов разыскать непросто. Одна из таких таблиц находится на сайте «Электронная библиотека» по ссылкеОна немного неудачно составлена – так называемые расширенные клавиши (это те, у которых второй байт в нашей таблице равен E0) там показаны добавлением лишнего разряда, равного 1. То есть выбрав из колонки HEX скан-код, например, 11С (клавиша <Enter> на цифровой клавиатуре), его надо для наших целей переписать как 1С E0. Официальный полный набор скан-кодов, включая и клавиши управления питанием (но исключая дополнительные медиаклавиши), можно скачать с сайта Microsoft. Ссылка на документ очень длинная, потому просто наберите в поиске на microsoft.com слова Keyboard Scan Code Specification», и получите искомое – правда, по-английски. При изучении этого документа учтите, что нас интересует только один набор кодов: Scan Code Set 1.
Разумеется, готовить такую строку чисел следует заранее и внимательно пересчитать все пары перед тем, как вводить ее в реестр. Но при вводе вы увидите,
Рис. 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> как системной для Windows (вызова главного меню), сохранив ее функциональность как клавиши-модификатора, через реестр не получится – она вообще перестанет реагировать на нажатие. Потому, раз уж мы занялись клавишами, заодно укажу средство с ней справиться, хотя оно и не имеет отношения к реестру. На диске к книге имеется папка AltSpy, в которой размещена программа того же имени. Скопируйте всю папку (она содержит три файла) на жесткий диск и запустите файл с расширением js (сценарий на языке Java Script). Чтобы не запускать руками каждый раз, его следует включить в автозагрузку (см. разд. 10.1.3 «Автозагрузка»). Спустя 10 секунд после запуска сценария AltSpy создаст в области уведомлений кареглазый значок, у которого окажется единственный пункт контекстного меню – Закрыть. Пауза нужна для того, чтобы AltSpy гарантированно оказался самым последним при запуске и перекрыл другие службы. После этого <Alt> перестанет вызывать главное меню, зато сохранит свою основную функциональность. Возможность вызвать главное меню у вас при этом не пропадает – эту функцию по-прежнему выполняет клавиша <F10>, зато теперь куда труднее вызвать его случайно и тем самым сбить фокус ввода с нужного элемента.
12.8. Синхронизация данных
Задача синхронизации данных на разных компьютерах очень похожа на задачу создания резервной копии (см. разд. 11.2 «Создание резервных копий системы»), но все-таки не совпадает с ней. В случае создания резервной копии мы стремимся лишь обеспечить идентичность копии последнему по времени оригиналу, в случае синхронизации задача шире – она может, например, включать двустороннее изменение файлов, если в копии оказались новые или измененные файлы.