Показаны сообщения с ярлыком Scan codes. Показать все сообщения
Показаны сообщения с ярлыком Scan codes. Показать все сообщения

понедельник, 22 июня 2009 г.

Apple keyboard + Windows

Однажды появилась у меня клавиатура Apple Keyboard aluminum, удобная, красивая, но есть определенная несовместимость в раскладке к которой обычно привыкаешь.

Основной проблемой стало полное отсутствие клавиши Insert, на ее месте располагается клавиша Fn, которая расширяет возможности функциональных клавиш и абсолютно бесполезна в Windows т.к. при нажатии на нее не передается никакой scan код. Нет привычных Print Screen или Pause/Break, зато теоретически можно с помощью дополнительных драйверов научить клавиатуру от apple быть клавиатурой от apple, т.е. уметь регулировать яркость монитора, управлять медиаплеером, громкостью, открывать лоток CD-ROMа, теоретически, потому что мне это ничего не надо, так что не будем на это терять время.

Посмотрим на клавиатуру по ближе и поймем, чего на в ней нехватает и что тут лишнее.

Клавиша открытия лотка CD-ROMa нам не интересна, не трогаем ее.
С клавишей Fn ни чего поделать нельзя, так что она просто будет занимать место на клавиатуре.
Insert перенесем на F13.
Print Screen на F14.
Break на F15 (Pause работать не будет, только комбинация Ctrl+Break).


Далее меняем местами Alt и Command, что бы было привычнее.


Ну и чуть чуть мультимедиа.
F16 - уменьшить громкость
F17 - увеличить громкость
F18 - Отключить звук (mute)
Для всех этих действий можно воспользоваться готовыми программами, на пример SharpKeys, суть их работы заключается в правке ветки реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout], но некоторые действия с помощью этих программ задать не получается (на пример назначить клавише F15 действие Break).

Попробуем разобраться что же это за параметр реестра и как самому задать необходимые клавиши.

В ветви реестра
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout
есть двоичный параметр с именем "Scancode Map". Он имеет следующую структуру:
Первые 8 байт заполнены нулями 00,00,00,00,00,00,00,00
Девятый байт равен количеству клавиш, которые необходимо переназначить + 1, т.е. если надо переназначить 2-е клавиши, то девятый байт равен 03
10, 11, 12 так же заполнены нулевыми значениями
Далее необходимо определить шестнадцатеричные скан-коды клавиш, которые вы хотите переназначить. Допустим, вы хотите изменить функцию клавиши Right Ctrl на Caps Lock. Находим код Right Ctrl - 1D E0 и код Caps Lock - 3A 00. Теперь дописываем в параметр "Scancode Map" сначала значение Caps Lock, а затем значение Right Ctrl.
Затем осталось дописать в конец параметра еще четыре нулевых байта.
Для примера с переназначеним Right Ctrl на Caps Lock параметр должен выглядеть так: 00,00,00,00,00,00,00,00,02,00,00,00,3A,00,1D,E0,00,00,00,00.

Чтобы переназначить более чем одну клавишу, необходимо таким же образом просто добавлять в конец параметра пары кодов клавиш (вначале клавишу "на которую", затем клавишу "с которой"). Например, чтобы переназначить Caps Lock на Left Shift и Left Alt на Backspace одновременно, параметр должен выглядеть так: 00,00,00,00,00,00,00,00,03,00,00,00,2A,00,3A,00,0E,00,38,00,00,00,00,0 0.

Чтобы просто заблокировать клавишу, следует переназначить её на "00,00".

Чтобы изменения вступили в силу, необходимо перезагрузить компьютер. Можно переназначить клавиши и для конкретного пользователя. В этом случае параметр "Scancode Map" следует разместить в ветви HKEY_CURRENT_USER\Keyboard Layout, а для вступлений изменений в силу будет достаточно перелогиниться.

Вот некоторые кода:

e0 1c (Keypad Enter) 1c (Enter)
e0 1d (RCtrl) 1d (LCtrl)
e0 2a (fake LShift) 2a (LShift)
e0 35 (Keypad-/) 35 (/?)
e0 36 (fake RShift) 36 (RShift)
e0 37 (Ctrl-PrtScn) 37 (*/PrtScn)
e0 38 (RAlt) 38 (LAlt)
e0 46 (Ctrl-Break) 46 (ScrollLock)
e0 47 (Grey Home) 47 (Keypad-7/Home)
e0 48 (Grey Up) 48 (Keypad-8/UpArrow)
e0 49 (Grey PgUp) 49 (Keypad-9/PgUp)
e0 4b (Grey Left) 4b (Keypad-4/Left)
e0 4d (Grey Right) 4d (Keypad-6/Right)
e0 4f (Grey End) 4f (Keypad-1/End)
e0 50 (Grey Down) 50 (Keypad-2/DownArrow)
e0 51 (Grey PgDn) 51 (Keypad-3/PgDn)
e0 52 (Grey Insert) 52 (Keypad-0/Ins)
e0 53 (Grey Delete) 53 (Keypad-./Del)

e0 5b (LeftWindow)
e0 5c (RightWindow)
e0 5d (Menu)


Set-1 make/break Set-2 make/break
Power e0 5e / e0 de e0 37 / e0 f0 37
Sleep e0 5f / e0 df e0 3f / e0 f0 3f
Wake e0 63 / e0 e3 e0 5e / e0 f0 5e

Ну а решение проблемы с клавиатурой будет выглядеть так:

REGEDIT4

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
"Scancode Map"=hex:00,00,00,00,00,00,00,00,0b,00,00,00,52,e0,64,00,37,e0,65,00,\ 46,e0,66,00,5b,e0,38,00,38,00,5b,e0,5c,e0,38,e0,38,e0,5c,e0,2e,e0,67,00,30,\ e0,68,00,20,e0,69,00,00,00,00,00

Progg it

Читать дальше...