Подтвердить что ты не робот

Существует ли кросс-платформенный низкоуровневый API-интерфейс python для захвата или создания событий клавиатуры?

Я пытаюсь написать кросс-платформенную программу python, которая будет работать в фоновом режиме, отслеживать все события клавиатуры и когда она увидит некоторые конкретные ярлыки, она генерирует одно или несколько событий клавиатуры. Например, это может быть удобно, если [email protected]сопоставлен с "[email protected]", так что каждый раз, когда какая-то программа запрашивает мой адрес электронной почты, мне просто нужно набрать [email protected]

Я знаю, что такие программы уже существуют, и я изобретаю колесо... но моя цель - просто узнать больше о низкоуровневых API-интерфейсах клавиатуры. Более того, ответ на этот вопрос может быть полезен другим программистам, например, если они хотят запустить SSH-соединение, для которого требуется пароль, без использования pexpect.

Спасибо за вашу помощь.

Примечание: есть аналогичный вопрос, но он ограничен платформой Windows и не требует python. Я ищу кросс-платформенный python api. Есть также другие вопросы, связанные с событиями клавиатуры, но, по-видимому, они не интересуются общесистемными событиями клавиатуры, а просто сочетаниями клавиш для конкретных приложений.

Изменить: я должен, вероятно, добавить отказ от ответственности здесь: я не хочу писать кейлоггер. Если бы мне понадобился кейлоггер, я мог бы скачать его из Интернета.; -)

4b9b3361

Ответ 1

Нет такого API. Моим решением было написать вспомогательный модуль, который использовал бы другой помощник в зависимости от значения os.name.

В Windows используйте расширения Win32.

В Linux все немного сложнее, поскольку реальные ОС защищают своих пользователей от кейлоггеров [*]. Итак, здесь вам понадобится корневой процесс, который следит за одним из [] ручек в /dev/input/. Ваш лучший выбор, вероятно, ищет запись ниже /dev/input/by-path/, которая содержит строки "kbd" или "keyboard". Это должно работать в большинстве случаев.

[*]: Jeez, даже мой антивирусный/троянский сканер будет жаловаться, когда я запустил программу Python, которая перехватывает события клавиатуры...

Ответ 2

Как парень, который написал оригинальный linux-порт pykeylogger, я могу сказать, что на самом деле нет перекрестной платформы. По сути, я переписал API pyhook для событий клавиатуры для захвата с самого сервера xserver, используя расширение записи. Конечно, это предполагает, что расширение записи есть, загружено на сервер x.

Оттуда он по существу просто обнаруживает, что вы на окнах или linux, а затем загружаете правильный модуль для ОС. Все остальное должно быть идентичным.

Взгляните на источник pykeylogger, в pyxhook.py для класса и implimentation. В противном случае просто загрузите этот модуль или pyhook, в зависимости от ОС.

Ответ 3

Я провел несколько тестов на Ubuntu 9.10. pykeylogger, похоже, не работает. Я попытался изменить /etc/X 11/xorg.conf, чтобы разрешить загрузку модуля, но в этой конкретной версии ubuntu отсутствует xorg.conf. Итак, по моему мнению, pykelogger НЕ работает на ubuntu 9.10!!

Ответ 4

Кросс-платформенные библиотеки пользовательского интерфейса, такие как Tkinter или wxPython имеют API для событий клавиатуры. Используя их, вы можете сопоставить "CTRL" + "@" с действием.

Ответ 5

В linux вы можете посмотреть pykeylogger. По какой-то странной причине чтение из /dev/input/.... не всегда работает, когда X запущен. Например, это не работает на ubuntu 8.10. Pykeylogger использует xlib, который работает именно тогда, когда другим способом нет. Я все еще изучаю это, поэтому, если вы найдете более простой способ сделать это, скажите мне.