Недавно стал относительно счастливым обладателем замечательной машинки MacBook Pro. Всем хорош прекрасный аппарат: и яблочко светится и клавиатура, и windows официально поддерживается (BootCamp), и железо очень мощное по сравнению со всем тем что у меня дома кроме него есть, и только две вещи отравляют мне жизнь: неестественное положение Fn и Crtl и отсутствие кнопки Delete (с отсутствием остальных более менее смирился) при наличии абсолютно не нужного eject'a.
Хочется соответственно поменять Ctrl <--> Fn и замапить Delete на eject.
Перепробовал все что нашел в гугле, но ничего не помогает. Остается, как я понял, только один путь — пытаться расковырять фильтр клавиатуры KeyMagic.sys или попробовать засунуть перед ним свой.
Не находил ли кто-нибудь более простого пути? Начинал ли кто-нибудь разбирать их фильтр? Есть ли описание того как вообще пишутся эти фильтры? Исходники какие-нибудь или статья в мсдне? Можно ли будет вообще всунуть туда не подписанный майкрософтом файл?
Буду рад любым ответам или хотя бы новым направлениям поисков.
P.S. только не спрашивайте зачем мне мак если я собираюсь использовать windows. Достался как приз на олимпиаде, продавать подарок жалко :-)
Спасибо за ответ. Не знаю какой из результатов поиска вы имели ввиду но многие я видел. Проблема в том что Fn и eject не видятся ниодной программой в windows, очевидно потому что обрабатываются эппловским фильтром KeyMagic.
Как узнать их супе коды? Где в цепочке драйверов стоит описанный вами ремаппинг? Выше кастомных фильтров или ниже?
Результат вот этот
Ну и вот один из результатов sharpkeys.codeplex.com/
Если они шлют сканкоды (Eject может как слать так и не слать, а Fn — почти наверняка не шлет) — значит их можно ремапить. Если не шлют (на большинстве ноутбуков Fn ничего не шлет, а выполняет действия на аппаратном уровне, но на некоторых ноутах в биосе можно поменять местами Fn и Ctrl) — то никакими дополнительными фильтр-драйверами ситуацию скорее всего спасти не получится.
Ремеппинг насколько я помню выполняется в драйвере Keyboard Class-а (kbdclass.sys) — upper filter драйвер для всех устройств в классе Keyboards. Более того, именно он создает имена для клавиатур (\Device\KeyboardClassN). В общем, весь клавиатурный ввод (PS/2, USBHID и даже виртуальная клавиатура сервера терминалов) проходит через этот драйвер. Если не здесь — то скорее всего уже нигде
Немного поискал, наткнулся на такое www.autohotkey.net/~daonlyfreez/tutorials/3p/Veil/fnkey.htm
Сначала совершенно правильно описывается проблема: Fn не шлет сканкодов — он меняет сканкоды других, а потом эта проблема каким то образом решается. Чего то я туплю и не могу понять что к чему — надо будет почитать на свежую голову.