2010-06-05 4 views
3

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

+0

На мой взгляд, вы не можете захватить или захватить ключ, так как у вас нет фокуса на вашем окне. – dzen

+0

Так что мне нужно Крюк тогда :) – Viet

+0

Просто любопытно. Вы ждете более тщательного ответа, чем мой?;) – przemoc

ответ

8

Общесистемный захват ключей - это сложный вопрос, но общесистемная зацепка клавиш даже сложнее. Каждая ОС/GUI имеет собственное решение, по крайней мере, для захвата. Qt4 не раскрывает такую ​​функцию, но Qt eXTension library решает проблему с ее QxtGlobalShortcut. Это хорошая обертка для:

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


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

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

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

Был X Event Interception Extension, но он не поддерживался и в конечном итоге был удален.

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

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

+0

+1 спасибо. Я не заметил вашего ответа. Я использую libqxt без успеха в Mac OS X. – Viet

+0

Как я уже сказал, я не являюсь пользователем Mac, поэтому я не могу вам помочь. Сожалею. – przemoc

+0

Интересно, что [Win32 Hooks] (http://msdn.microsoft.com/en-us/library/ms997537.aspx) теперь является пустой страницей с 'Content Removed'. Это моя вина? ;) Я обновляю выше ответ. Не беспокойтесь, есть [Wayback Machine] (http://www.archive.org/). 'http://web.archive.org/web/20080510093117/http://msdn.microsoft.com/en-us/library/ms997537.aspx)' - Win32 Крючки от Kyle Marsh – przemoc

 Смежные вопросы

  • Нет связанных вопросов^_^