Как перехватить/подменить события мыши/клавиатуры в Windows без внедрения в процесс?

Я хочу написать аналог AutoHotKey, с возможностью писать скрипты на Lua и интегрированными функциями AutoIt и, возможно, функциями по работе с пользовательским интерфейсом.

Одна из ключевых возможностей AutoHotKey — переназначение клавиш. Мне еще хотелось бы преобразовывать некоторые события/сочетания клавиш в другие, скажем, боковая мыши+скролл => управление громкостью, в зависимости от активного приложения.

AutoHotKey, например, позволяет переназначать клавиши и использует LL mouse/keyboard hook. Судя по msdn эти хуки обрабатываются в контексте программы установившей хуки. А это очень важно, так как антивирусы и античиты могут натворить дел. Кроме этого, хуки тормозят систему.

Важно так же иметь возможность фильтровать события по устройствам, т.е. разные устройства могут иметь свою конфигурацию. Вероятно нужен драйвер?

В общем, благодарен за любые идеи, мысли по этому поводу.
  • Вопрос задан
  • 9581 просмотр
Пригласить эксперта
Ответы на вопрос 4
4dmonster
@4dmonster
в такой постановке вопроса — да, нужен драйвер.
Вот кстати на хабре недавно писали habrahabr.ru/post/146071/
Ответ написан
Комментировать
ak40u
@ak40u
Хук надо делать
Ответ написан
Комментировать
Corwal
@Corwal
Сколько не использовал low-level хуки, еще ни разу не испытывал каких либо неудобств с антивирусами. Нагрузка на систему конечно есть но не столь существенная (все таки события клавиатуры и мишки происходят не так часто, чтобы сильно нагрузить процессор даже не самым оптимальным алгоритмом который решает вашу задачу).
У меня также есть статья на эту тему:
habrahabr.ru/post/146800/
Ответ написан
kemsky
@kemsky Автор вопроса
С одной стороны хуки простое решение, с другой — есть некоторые недостатки. Например, винда может выкинуть хук, если он слишком долго выполняется или невозможно определить девайс-источник события.

Драйвер по сути идеально подходит только для переопределения событий (с примитивными условиями) с определенного устройства, есть уже готовый вариант oblita.com/Interception.

Возможно, я не до конца понимаю, но мне драйвер не подойдет, я хочу иметь возможность выполнить простой луа-скрипт в хуке (скажем проверить какое окно активно и вернуть соотв. код).

Исходники AutoHotKey открыты, но к сожалению там ооочень много кода, кое-что можно подсмотреть, но во всем разбираться нет желания.

зы. в статье почему-то не видно картинок…
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы