Как стать автором
Обновить

Комментарии 32

Если всё равно это только под Windows, почему не использовать AutoHotkey?
Был топик на тему: habrahabr.ru/blogs/soft/130379/ (там чуть другая доработка раскладки, но переделать под себя — не проблема)
А вот комментарий с более компактной записью: habrahabr.ru/blogs/soft/130379/#comment_4338231
Действительно, выглядит очень здорово, спасибо за подсказку.
Про мышь — у меня был спидометр для мыши ещё в 98 винде, так что идея не нова. Название, правда, уже не вспомню, но умела она считать расстояние, среднюю/текущую скорость, количество кликов и ещё что-то в том же духе.
Да, про пост-то я и забыл написать!
По сути, этот пост — демонстрация работы с WinApi и хуками на питоне, а сама постановка задачи не столь интересна.
А в жизни, как и в науке, часто так случается — когда актуальная задача является рутинной, а вот что-то красивое и интересное может не иметь хорошего практического применения :)
Нет, увы. Я тоже сначала был уверен, что именно так оно и должно работать, но, к сожалению, ошибался.
ноут другой, но работает. спасибо за подсказку
Когда-то пользовался вот таким: SetWindowsHookEx + CallNextHookEx
Если я не ошибаюсь, pyHook — это просто красивая обертка для этих функций.
И вместо alt можно опять же заюзать или Fn или Super ([Win]). Тогда не будет проблемы с меню приложения.
Fn, если я не ошибаюсь, не генерирует событий сама по себе, только совместно с «нужными» клавишами.
Точно, ошибка вышла, извините. Хотя все равно у меня на Asus'е на клавишах навигации есть такие действия для управления плеером.
Fn действительно сама по себе не генерирует сообщений, а Win генерирует только «key down» (как ни странно).
Возможный выход — попытаться в момент нажатия стрелки проверить, нажата ли Win через GetKeyboardState(). Нужно посмотреть, доступна ли эта функция в pywin32.
Слово «windows» в начале упоминать надо. Если бы была более приличная ОС, я бы показал более приличные методы реализовывать этот же функционал.
Насчет «приличности» я не слишком разделяю Ваши взгляды. Но, тем не менее, никогда не поздно написать свою статью — благо, Хабр позволяет :)
Amarao! Для более приличной ОС я бы не отказался услышать рецепт. Дело в том, что для линукса я просто сваял свою раскладку с Level3Shift'ом на CapsLock'е и стрелками на hjkl. Но при таком решении отпадает возможность использовать капс для переключения раскладки, а это удобно и привычно. Если вы с этим справились, здорово было бы узнать как.
Именно с этой задачей я не сталкивался, благо, thinkpad'овские клавиатуры имеют на борту все нужные кнопки. В своё время вешал нужные команды на кнопки с помощью acpi.
Нужные кнопки на месте. Просто удобнее не бегать правой рукой между курсором и буквами, а оставаться на месте.
ACPI… Не знаю. А оно до xkb работает, или после? Просто после xkb кнопка — либо модификатор, либо кнопка и никак не обе вместе. Оттуда и проблемы.
Хм… Что-то я ступил: должно быть до. Ведь acpi и без иксов работает…
Спаибо за наводку, попробую поковырять!
Для xserver давно уже существуют xbindkeys и xmodmap, с помощью них можно переназначить любые клавиши (из тех, которые сама система может видеть) на что угодно да еще и запуск нужных программ сделать. Статей полно.
Да, даже движок «zoom» кошерной клавиатуры одной очень некошерной фирмы можно прикрутить.
Вообще, гибкость — это хорошо.
Благодарю! Обязательно посмотрю их поподробнее. Это как минимум должно быть удобней, чем раскладку для xkb писать.
Хотя я пока всё же сомневаюсь, что оно сможет сделать то, что хотелось бы поиметь в идеале:
CapsLock + j = «вниз» (по нажатию j)
один CapsLock = переключение раскладок (по отпусканию)
Не уверен, что такое возможно сделать с помощью Xmodmap. Советую заглянуть на LOR Wiki ( www.linux.org.ru/wiki ), там может быть совет, как сделать подобное. Либо спросить на форуме того-же сайта.
>(приняв, например, 1 пиксель ~ 1 мм)
Не получится так. Перемещение курсора на экране зависит от скорости перемещения мышки. Абсолютное изменение координат устройства в Windows, скорее всего, можно получить, только напрямую работая с драйвером. Или даже только написав свой драйвер. Ну, мне так кажется.
Проще будет достать значение скорости мыши с настроек и сопоставить.
Хотя и не будет так точно, но более реально.
Можно сделать раскладку, в которой с нажатым правым Alt (AltGr) некоторые клавиши становятся клавишами управления курсором. Тогда даже не нужно снимать правую руки со стартовой позиции печати ([a][s][d][f][ ][ ][j][k][l][;]), чтобы передвинуть курсор.

Собственно я так и работаю уже давно в Linux, не знаю правда, насколько это будет работать в Windows, скорее всего проблем не будет. Использую «Miniguru» схему: [i][j][k][l] — стрелки, [u][o] — Home/End, [p][;] — PgUp/PgDn, [m] — Delete, [,] — Insert. При желании можно сделать как в VIM — [h][j][k][l].


Ibnteo, тогда к вам тот же вопрос, что я выше Amarao задавал: как это реализовано? Своя раскладка для xkb или ещё что-то?
На картинке есть ссылка на статью.

Я правил файлы нужных мне раскладок xkb в /usr/share/X11/xkb/symbols/
Видимо правильно будет создать отдельный файл и подключать его как-то, я не знаю как это реализовать.
Спасибо. Коммент писал ещё не проснувшись, извините, ссылку не заметил :)
Тогда этот как раз тот, который применил я, жаль.
Напишу уж тогда кстати, как свои файлы подключал, может пригодится:
файл /usr/share/X11/symbols/capsext
А это надо добавить в .xinitrc:
setxkbmap -compat «complete+ledscroll(group_lock)» -symbols «pc+capsext(us_capsext)+capsext(ru_capsext):2+inet(evdev)»
А что дальше происходит с этим скриптом? Его надо во что-то компилировать или попросту запускаете .py при старте системы?
При помощи py2exe билдится приложение, которому для запуска питон не нужен. Делается это достаточно просто — на сайте (ссылка в статье) есть подробное описание.
Приложение собирал так, чтобы консоль сразу пряталась при запуске, и все это — в Run раздел реестра. При запуске системы оно запускается и тут же прячется — отключить (в крайнем случае) можно через процессы.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории