[windows] создание custom keymap

yroslavasako

Есть клава. Очень отстойная и неудобная, да к тому же с дебильным расположением кнопок. Есть желание эти перенастроить кнопки с тем, чтобы они были более адекватно расположены на клаве. В том числе вместо правого win приделать вызов меню.

kruzer25

http://codeplex.com/sharpkeys позволяет переназначать клавиши.

yroslavasako

спасибо, использую если другого выбора не останется. Там слишком бедный функционал на лицо.
Лучше бы была тулза для генерации полноценных keymap, а не для алиасинга существующей.

juliuzz

отличная клава
мне ход клавиш понравился :)

yroslavasako

а мне как раз наоборот. Среди всего прочего и ход клавиш мне тоже пришёлся не по душе.
Для винды есть аналог xev, чтобы посомтреть keycode?

mkrec

Spy++
AutoHotKey

yroslavasako

AutoHotKey
а он может использовать функциональный клавиши, которые не были определены дефолтной раскладкой? У сановской клавы есть несколько странных клавиш, которые можно было бы заюзать.

mkrec

может. Только Fn не может, а всякие кнопки громкости и прочую ерунду запросто.

psihodog

Не знаю, поможет ли тебе http://msdn.microsoft.com/en-us/goglobal/bb964665.aspx , я с её помощью переназначал в русской раскладке точку на кейпаде на точку, а не на запятую.

kruzer25

Там слишком бедный функционал на лицо.
Чего именно тебе не хватает?
тулза для генерации полноценных keymap
Microsoft Keyboard Layout Creator.

kruzer25

Среди всего прочего и ход клавиш мне тоже пришёлся не по душе.
Ну и нафига тогда тебе эта клава?
Для винды есть аналог xev, чтобы посомтреть keycode?
В том же SharpKeys там, где выбираешь клавишу, есть кнопка "Type key".

yroslavasako

Microsoft Keyboard Layout Creator.
Странное чуство юмора у MSовцев. Как можно назвать keymapом нечто, что определяет всего лишь половину клавиш клавиуатуры. Вопрос знатокам винды: как в таком случае называется системный объект, управляющий настройками остальной половиной клавиш?

kruzer25

Раскладка клавиатуры - это и есть та самая "половина клавиш". Или для тебя являлось бы естественным, если бы всякие там стрелки, энтеры и функциональные клавиши по-разному работали в русской и английской раскладках?
Для переопределения клавиш независимо от раскладки, делаются keyboard hooks; есть и фронтэнды для этого, например, http://codeplex.com/sharpkeys

yroslavasako

я вот нагуглил map keyboard - она без хуков работает (в смысле не требует дополнительного сервиса или загурежнной в память программы)
Но тоже бедна функционально. Пробую sharpkey, отпишусь о результатах

kruzer25

она без хуков работает (в смысле не требует дополнительного сервиса или загурежнной в память программы)
Ты не в теме, keyboard hooks - это фича винды, она работает всегда, никаких дополнительных сервисов/программ для этого не нужно; просто на чистой винде не задан ни один хук.

Marusetta

как вариант можно задать мап ручками, через HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout\Scancode Map
сканкоды подробно расписаны например здесь
Заодно задам встречный вопрос - можно ли в винде заставить капслок работать как зажатый шифт?

kruzer25

Заодно задам встречный вопрос - можно ли в винде заставить капслок работать как зажатый шифт?
Повторю - чем писать эти хуки руками, гораздо легче воспользоваться нормальным фронтендом, тем же sharpkeys, к примеру.
Запустил сейчас sharpkeys - в списке сканкодов ёесть и капслок, и шифт. Так что ответ на твой вопрос - да.

yroslavasako

Результаты:
SharpKeys is a utility that manages a Registry key that allows Windows to remap one key to any other key
ну и бедная же функциональность у этого дотнетового чуда - обёртка для реестра. А провозможность ремапа в реестре я и раньше слышал. Только вот мне казалось, что много таким способом не добиться.
И вот ожидаемое открытие, которое поджидало меня при чтении мануала.
Things that SharpKeys will not do:
* Allow you to swap two keys with each other - e.g. you can’t have Q and Z swap places because the remapping code would get confused
* Map multiple key presses to one key - e.g. it will not support an attempt to remap Ctrl+C to the F5 key
* Map mouse clicks to any key
* Support certain hardware keys that never make it to Windows - e.g. Logitech’s volume buttons or most Fn keys
* Support multiple mappings for different users - the Windows key being tweaked is for an entire machine
* Protect you from yourself - if you disable your DEL key and can’t login because CtrlAltDel doesn’t work now, you’ll have to reformat
Кстати, оно почти слово в слово повторяет MSDNовскую инфу об опциях реестра, впрочем я не удивлён
Дальнейшее впечатления от проги: очень жаль, что её нельзя скачать с официального сайта. Хотя возможно для этого нужна ява, но стоило хотя бы предупредить своего посетителя о необходимости нестандартной функциональности его вебклиента. Поскольку предупреждений не было, будем полагать, что так оно и надо.
Порадовала возможность узнать какой-то код клавиши, нажав на неё. Жаль только ни правая, ни левая alt не опредилась.
Зато определились все дополнительные клавиши как 00_00 key disabled. Ну это уже надо uttsc конфигить. Зато определился левый бэкслеш как 00_56 key_undefined. При этом, что странно, работает он на данный момент в винде точно так же как и правый, который определён, и на который собственно и назначен бекслеш.
Последнее полезное наблюдение заключается в том, что принцип действия map keyboard и sharpkeys оказался идентичным, они оба правят реестр.

Marusetta

ты не понял
мне нужно такое поведение капслока, как если бы был зажат шифт (то есть чтобы в верхний ряд переводились не только буквы, но и остальные символы). Sharpkeys - фронтенд к тому способу что я описал выше, а значит, не умеет такого. По крайней мере, под XP.

kruzer25

ну и бедная же функциональность у этого дотнетового чуда - обёртка для реестра
Я тебе и говорил - это удобный фронтенд для настройки keyboard hooks.
Дальнейшее впечатления от проги: очень жаль, что её нельзя скачать с официального сайта
Качал с codeplex, никаких проблем не было (как и с другими программами с codeplex).

kruzer25

мне нужно такое поведение капслока, как если бы был зажат шифт
А что, твой пост можно понять каким-то другим образом?
Sharpkeys - фронтенд к тому способу что я описал выше, а значит, не умеет такого
Почему не умеет?
Конкретно с шифтом мне очень лениво тестить, потому что для этого нужен перелогин, но у меня на некоторых дополнительных кнопках висит Win, и все хоткеи замечательно работают. Кроме того, как можно видеть, кнопки, к примеру, g и G там не различаются, считаются за одну - поэтому не вижу ничего, что помешало бы такому способу работать. Делаешь пробелу действие как у shift - всё, пробел+любаяклавиша работает как shift+этаклавиша.

mkrec

> мне нужно такое поведение капслока, как если бы был зажат шифт (то есть чтобы в верхний ряд переводились не только буквы, но и остальные символы).
MSKLC прекрасно с этим справляется. Создай новый лэйаут на базе стандартного и установи соотв-ую галку.
А еще можно французскую клаву поставить, там по умолчанию так, как ты хочешь (правда, она AZERTY).

yroslavasako

Запустил сейчас sharpkeys - в списке сканкодов ёесть и капслок, и шифт. Так что ответ на твой вопрос - да.
логика хромает. Видишь, ли зажатый шифт и капслок работают по-разному. Так что при твоём подходе придётся зажимать капслок, что по-моему, ничем не лучше зажимать шифт.
Однако же, тем не менее, с ответом ты угадал. Можно добиться требуемого, но для этого нужно не хуки использовать, а предложенную раннее нативную утилиту от MS: Microsoft Keyboard Layout Creator

yroslavasako

Качал с codeplex, никаких проблем не было
если бы ты осилил мою цитату дальше, то обнаружил бы мой намёк на то, что оно требует нестандартной функциональности, то бишь явы.

kruzer25

обнаружил бы мой намёк на то, что оно требует нестандартной функциональности, то бишь явы.
Качаю дома проги с codeplex, ява не стоит и вообще ие 64битный. Всё работает, ЧЯДНТ?
И да, было бы странно, если бы один из основных сайтов МС использовал чужую технологию для базовой функционаьлности.

kruzer25

Так что при твоём подходе придётся зажимать капслок,
Наконец-то понял, что ты имел в виду.
Тогда да, только MSKLC.

yroslavasako

что же, я высказался недостаточно верно, он требует ява скрипт

reallyjust

Только Fn не может
кстати, а мне как раз нужно сделать Fn на стандартной клаве.
какая из этих прог может помочь?

yroslavasako

понятия не имею. Поставил autohotkey, но не разбирался с ним. Буду благодарен, если мне укажут, как можно получить от него диалоговое окошко, в которое я бы нажимал клавишу и мне бы высвечивался код.
Есть два пути:
1) поддержка родными средствами ОС. Для этого нужно настроить что-то вроде драйвера клавиатуры в hardware abstraction level - все предложенные вариант меняли либо раскладки (только буквенные клавиши либо меняли местами существующие клавиши. Добиться с помощью предложенных прог существенно отличающегося поведения ОС не удалось. Примеры того, что не удаётся сделать: ввести новые коды (например код MiddleWin не существует, хотя есть rwin и lwin ввести новые режимы (есть один дополнительный режим - Caps Lock) и других не ожидается, ввести новые клавиши, переключающие состояния (добавить что-либо к набору из Ctrl,Alt,Shift,Win).
2) поддержка сторонними программами, которые будут висеть в памяти и перехватывать клавиатурные события. Недостатки: лишние тормоза, и неполная применимость: боюсь, что в некоторых игрушках оно работать не будет. Достоинства: больше шансов получить что нужно, потому как от MS глупо ожидать конфигурируемых компонентов.
Тут наверняка открыт широкий простор для поисков. На форуме рекомендует автохоткей, так что можешь попробовать и рассказать о результатах. Особенно меня интересуют возможность задавать хоткеи на последовательность комбинаций клавиш а не на одну и возможность создавать кастом моды.
В идеале нужно использовать обе возможности 1) и 2 распределив задачи согласно их уровню. Введение новых клавиш оставить за системой, а их использование за приложением.

Andbar

просто на чистой винде не задан ни один хук
сомнительное утверждение

kruzer25

Имелось в виду, что этот ключ в реестре - пустой. Разве не так?

yroslavasako

так, именно так. Пустой ключ - это есть дефолтное значение. У радиста, видимо, альтернативное восприятие слова "чистая винда". Возможно он называет таковой винду без вирусов

Andbar

нет, у меня другое понимания слова хук применительно к винде

yroslavasako

мы тут клавиатурные хуки обсуждаем, а не хуки apiшные. А клавиатурные хуки задаются одним ключиком в реестре. Который под дефолту пустой

Andbar

ну хз, ни в одной из первых нескольких ссылок в гугле по фразе "keyboard hook" ничего не говорится про реестр

yroslavasako

. Зато определился левый бэкслеш как 00_56 key_undefined. При этом, что странно, работает он на данный момент в винде точно так же как и правый, который определён, и на который собственно и назначен бекслеш.
О, придумал как его использовать. Хочу на него забиндить символ "_". Вот только keyboard hook - он позволяет переназначить саму клавишу на сочетание ('-','_'). А layout creator меняет поведение уже всей этой клавиши, что меня не устраивает. Что нужно сделать - добавить новую клавишу ('_','_' скажем, и добавить её в layout и там уже настроить поведение. Как это делается под виндой?
Оставить комментарий
Имя или ник:
Комментарий: