Сочетание клавиш и комбинаций клавиш на клавиатуре с Qt 4.6 - PullRequest
3 голосов
/ 05 июня 2010

Допустим, у меня есть приложение без окон, которое имеет только значок на панели задач (Windows, Mac OS X и Linux). Я хочу, чтобы он захватывал некоторые комбинации клавиш и клавиш, скажем, Right Control + Right Shift. После ввода правильной комбинации, она что-то сделает, скажем, снимок экрана. Я могу сделать приложение без окон, значок на панели задач и снимок экрана, но я не знаю, как глобально контролировать клавиатуру на предмет сочетаний клавиш. Пожалуйста, советуйте. Любая помощь или подсказка очень ценится! Заранее спасибо!

1 Ответ

8 голосов
/ 01 июля 2010

Общесистемный захват ключа - сложная тема, но общесистемная перехват ключа еще сложнее. У каждой OS / GUI есть свое решение, по крайней мере, для захвата. Qt4 не предоставляет такую ​​возможность, но Библиотека Qt eXTension решает проблему с помощью QxtGlobalShortcut . Это хорошая обертка для:

Таким образом, вы можете получить явную комбинацию клавиш, то есть конкретный ключ и модификаторы (XGrabKey () допускает немного больше), которые не получит ни одно другое приложение. Последовательности клавиш, то есть последовательные комбинации клавиш, здесь не поддерживаются.


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

Если вы в Windows, тогда вы можете прочитать:

В X11 все намного сложнее. Есть как минимум две страницы, которые вы можете прочитать:

Было X Расширение перехвата событий , но оно не поддерживалось и в конечном итоге было удалено.

Надеюсь, это можно сделать без помощи инфраструктуры X11. В ядре Linux 2.6 имеется «Интерфейс событий», известный как evdev , который можно использовать здесь. Подробности можно найти в исходном коде кейлоггера Linux logkeys . Это также можно сделать с помощью чего-то похожего на evdev. Смотрите мой проект PoC: kaos - Отображение ключевых действий на экране.

А у меня нет Mac, так что дальнейших ссылок нет. ;)

...