Как получить событие нажатия клавиши, когда окно не сфокусировано? - PullRequest
4 голосов
/ 14 сентября 2010

Я пишу программу с использованием GTK. Программа отслеживает нажатие клавиш пользователем и воспроизводит звук. Мой вопрос заключается в том, как мне поймать событие нажатия клавиши, когда окно не сфокусировано? Я планирую оставить свою программу на значке в трее, поэтому мне интересно, как я могу получить любое событие нажатия клавиши оттуда. Спасибо

Edit: Наконец-то я нашел способ сделать это - в расширении XTest я нашел фрагмент кода из программы 'xmacro'. Вы можете увидеть мою реализацию здесь: http://github.com/Aitjcize/Qwertickle/blob/master/src/qwertickle.c

Кстати, это все еще довольно глючит, может быть, кто-то может мне помочь? :)

Ответы [ 2 ]

3 голосов
/ 04 октября 2010

Как сказал Мэтт Джойнер,

Подобные вещи не так просты в Linux.

и, к сожалению, GTK + не может творить такую ​​магию.

Вам следует взглянуть на XEvIE - Расширение X Event Interception - оно облегчит вашу работу.

XEvIE - расширение X, предоставляющее функциональные возможности, позволяющиепользователи перехватывают события клавиатуры / мыши.

и , как предлагает этот парень , другой способ - использовать XGrabKey () / XUngrabKey () от X11.Я считаю, что tinywm показывает, как правильно его использовать.

0 голосов
/ 04 октября 2010

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

Вы также можете напрямую открыть / dev / input / eventX и прочитать () из него в структуру input_event, но это немного неприятно, потому что вам нужно иметь соответствующие права (обычно root или изменить его с помощью chmod)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...