понедельник, 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

39 комментариев:

  1. Классная статья! У меня клавиатура модели А1016, клавиши другие, но проблемы те же. Ничего не менял, просто привык к тому что работает. А теперь, прочитав такие тонкости, думаю сделаю всё на свой лад.

    ОтветитьУдалить
  2. Анонимный22 июня 2010 г., 20:39

    статья и правда класнная,но нет файла реестра который можно просто запустить и установить данную клаву?я просто не дружу с реестром...
    заранее спасибо,ответ буду ждать по адресу bss-01@mail.ru

    ОтветитьУдалить
  3. ...ничего не понимаю: во-первых в реестре по указанному адресу вообще отсутствовал данный параметр, во-вторых после его добавления, согласно вашим рекомендация, и перезагрузки ничего не изменилось...
    какие будут соображения по этому поводу???
    з.ы.: winXP_SP3, keyb точно такой как на картинке
    HELP!

    ОтветитьУдалить
  4. > ничего не понимаю

    Как раз сейчас на xp sp3, попробуй скачать и запустить файл реестра, по ссылке в конце статьи, там линк был маленько битый, сейчас нормальный.

    ОтветитьУдалить
  5. А где можно посмотреть коды,чтобы переназначить клавиши?
    У меня клавиатура Apple Wireless Keyboard, то есть она работает через блютус, отсутствуют кнопки делит, номе, а также отдельный блок цифровых клавиш.
    Хотелось бы сделать кнопку делит из кнопки открытия диска (она как раз над бэкспейсом), а также добавить кнопки номе, енд, инсерт, принт скрин.
    Из свободных кнопок только кнопка fn и кнопка "\/ или в английской раскладке \|" кнопки \/ почему то две, поэтому одна лишняя.
    Также по умолчанию в медиаплеере кнопки F7, F8, F9 работают со звуком, а хотелось бы переназначить их на F10, F11, F12, где указаны соответствующие вторые значения. Ну и добавить управление воспроизведением на кнопки F7, F8, F9; добавить управление подсветкой экрана на кнопки F1, F2.
    Возможно ли это сделать путем манипуляций с реестром, либо же только специальные программы нужны?

    ОтветитьУдалить
  6. На кнопку открытия диска у меня не получилось ничего назначить, а в остальном можно поиграться с утилиткой Sharp Keys http://www.randyrants.com/sharpkeys/ она выполняет все тоже самое, но в относительно понятном интерфейсе.

    ОтветитьУдалить
  7. Здравствуйте! Скажите Сергей, а будет ли работать F8-F12 в Биос (выбор устройства при загрузке с которого грузиться и т.д.)

    ОтветитьУдалить
  8. > будет ли работать F8-F12 в Биос

    У меня работают

    ОтветитьУдалить
  9. А для Windows 7 reg файл действителен?

    ОтветитьУдалить
  10. > А для Windows 7 reg файл действителен?

    Да.

    ОтветитьУдалить
  11. Добрый день!
    У меня блютуз клавиатура apple. Установлена OC Win 7. Возможно ли на кнопку F3 повесить функцию переключения окон (Win+Tab). Если да, то как это сделать.

    ОтветитьУдалить
  12. Сергей добрый вечер..
    а можно ли попросить сделать рег файл со всеми изменениями кроме: оставить на месте клавиши ALT и CMD... как есть. заранее огромное спасибо.
    и еще вопрос. как откатиться к старым значениям?
    если придется ставить win клавиатуру

    ОтветитьУдалить
  13. большое спасибо за помощь. под Win7 параметра Scancode Map у меня в реестре не существовало совсем, но его можно просто создать. все работает прекрасно.

    ОтветитьУдалить
  14. Александр писал:
    Сергей добрый вечер..
    а можно ли попросить сделать рег файл со всеми изменениями кроме: оставить на месте клавиши ALT и CMD...как есть.

    Сам тоже склоняюсь к такому решению:
    достаточно из регфайла удалить:
    5b,e0,38,00,38,00,5b,e0,5c,e0,38,e0,38,e0,5c,e0,
    поясню
    5b,e0,38,00, lalt>lwin
    38,00,5b,e0, lwin>lalt
    5c,e0,38,e0, ralt>rwin
    38,e0,5c,e0, rwin>ralt

    ОтветитьУдалить
  15. Сегоднгя подрубил клаву Apple Keyboard (MB110) с цифровым блоком клафиш!

    Windows 7 x86, винда сама нашла все дрова и все поставила, клава работает отлично, с привычной для РС клавиатур раскладкой (странно, читал посты, и обычно все это делали вручную, а у меня все стало автоматом!!))), но одно "НО"! Хотелось бы добавить лишь клавишу "PrintScreen", например на клавишу F13... больше ничего не интересует и не тревожит... Как это сделать?
    В ветке реестра по данному пути "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout", имеются еще 2 папки...
    "DosKeybCodes" и "DosKeybDs"...
    Где и что менять - не пойму...

    Подскажите, как назначить ПринтСкрин на клавишу F13 ?

    И еще одно, а это нормально, что встроенный в клавиатуру ХАБ не работает с Флэхами? Система, при вставлении флэшки пишет, что не хватает мощности и энергии, что можно сделать с этим?

    ОтветитьУдалить
  16. > Хотелось бы добавить лишь клавишу
    > "PrintScreen", например на клавишу F13

    как то так, ну или с помощью Sharp Keys (http://www.randyrants.com/sharpkeys/)

    REGEDIT4

    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
    "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,37,e0,64,00,00,00,00,00,00


    > И еще одно, а это нормально, что встроенный в
    > клавиатуру ХАБ не работает с Флэхами? Система,
    > при вставлении флэшки пишет, что не хватает
    > мощности и энергии, что можно сделать с этим?

    Да, на PC у меня ни разу не заработал хаб, клавиатура же определилась как клавиатура, а не дополнительный набор усб портов, как это происходит в случае с хабом ;)

    ОтветитьУдалить
    Ответы
    1. http://www.youtube.com/watch?v=s8kVWy8Qf7A&list=FL0Ny_7BwLdIsf1ob_Dt2zfQ&feature=mh_lolz
      увеличил питание на порте и говорит что работает- пока не разбирался но у него работает все с виду нормально.

      Удалить
  17. день добрый Сергей!
    как настроить F19 на Калькулятор. с помощью Sharp Keys

    ОтветитьУдалить
  18. Добрый вечер Сергей !
    Подскажите пожалуйста как определить + на прибавление громкости(громче) в wmp, а - в уменьшении(тише)?

    ОтветитьУдалить
  19. Добрый Вечер! Помогите, пожалуйста... Программа, которая некоторые клавиши меняет у меня не работает. Пожалуйста, пропишите в файлике Управление музыкой на F16.17.18 и переключение треков на F13.14.15 Помогите, пожалуйста. Подарили клавиатура а разобраться так и не смог

    ОтветитьУдалить
  20. Спасибо большое! Наконец-то Ctrl-Break работает и на эппл-клавиатуре!

    ОтветитьУдалить
  21. Добрый день Сергей! Я нашел решение как кнопку Fn замапать как Insert и вернуть остальные клавиши типа ScrollLock. Поищите в гугле драйвер hidfalum. Специально для нашей родненькой клавы написан.

    ОтветитьУдалить
  22. Анонимный5 мая 2012 г., 8:57

    В Вашем примере после восьми пустых байт отсутствует значение количества байт. вместо этого вы написали "ob" тогда становится непонятным алгоритм

    ОтветитьУдалить
  23. Анонимный5 мая 2012 г., 9:33

    И второй вопрос к знающим , а как быть если нужно переназначить клавиатурное сочетание например Lctrl+shift+p на клавишу Space ? Для большинства пультов это более чем актуально

    ОтветитьУдалить
  24. Анонимный6 июня 2012 г., 20:58

    Сергей, а можете подсказать как на клавишу, открывающую сидиром, запрограммировать переход в спящий режим?
    Как откорректировать выложенный вами реестр???
    Если не сложно, можно на почту ty333@мэйл точка ру

    ОтветитьУдалить
  25. В windows 8.1 не работает...

    ОтветитьУдалить
    Ответы
    1. В windows 8 работало нормально, обновил до 8.1 и перестало работать... Сделайте пожалуйста куп файл под windows 8.1

      Удалить
    2. Тупанул, все работает, просто копьютер не перезагрузил...

      Удалить
  26. Большое спасибо!!! Очень полезная статья.

    ОтветитьУдалить
  27. ну, вообще-то, Hidfalum driver всё делает еще лучше - в том смысле, что Fn клавиша работает нормально как Insert и не "бесполезна" (как написано в этой статье)

    ОтветитьУдалить
  28. Все работает, а как откатать обратно? Не понравилось(

    ОтветитьУдалить
  29. Поддерживаю последний вопрос!! Как откатиться назад? Выложите файл пож-та!

    ОтветитьУдалить
  30. Ребят помогите завести еще USB порты cбоку

    ОтветитьУдалить
  31. Будьте добры, подскажите как сделать Break на F15, клавиатурой пользуюсь, PrtScreen настроил, все остальные ваши твики не нужны.

    ОтветитьУдалить
  32. Пожалуйста, подскажите, с помощью Hidfalum driver можно настроить PrtScreen и где его можно скачать?

    ОтветитьУдалить