2012-05-31 3 views
3

Я пытаюсь сделать своего рода кейлогер на Java. У меня есть приложение, которое позволяет людям получать свои RSS-каналы на своем рабочем столе, и я хочу сделать быстрый доступ. Кстати, мне нужно что-то, что может сделать это:Java - Key catcher

  • я начинаю свой файл банк Java и свернутый в системном лотке.
  • Пользователь делает то, что хочет (серфинг, просмотр фильмов и т. Д.).
  • Он нажал комбинацию клавиш (CTRL + I), а затем откроется окно java и отобразит графический интерфейс, где он может проверить новости и изменить конфигурацию приложения.
  • Теперь он может свести к минимуму окно (значок в системном трее) и продолжать использовать свой компьютер нормально.

Мое приложение должно быть полностью перекрестной платформой. Все это сделано, за исключением этой функции. Я пытался сделать это с KeyStroke и даже System.in, но они только поймают комбинацию клавиш, когда пользователь имеет активное окно.

Итак, есть ли способ поймать комбинацию клавиш извне приложения (например, прозрачный накладной) без использования JNI или JNA (это то, что дали мои поиски).

Благодарим за помощь.

+1

Вы уверены, что конечным пользователям будет удобно с приложением, которое захватывает все ключи? Я видел бы это как угрозу безопасности. – Kyle

+0

Это приведет только к двум клавишам комбинации. На самом деле ничего больше и много приложений. – Manitoba

ответ

0

Нет, вам придется отказаться от какой-либо зависящей от системы библиотеки, то есть использовать некоторую форму JNI.

Различные встроенные уровни детализации являются:

WHEN_ANCESTOR_OF_FOCUSED_COMPONENT

Константа используется для registerKeyboardAction, что означает, что команда должна быть вызвана, когда принимающий компонент является предком сфокусированного компонента или сам по себе является сфокусированным компонентом.

WHEN_FOCUSED

Константа используется для registerKeyboardAction, что означает, что команда должна быть вызвана, когда компонент имеет фокус.

WHEN_IN_FOCUSED_WINDOW

Константа используется для registerKeyboardAction, что означает, что команда должна быть вызвана, когда принимающий компонент в окне, которое имеет фокус или сам является сфокусированным компонентом

+0

Спасибо за ваш ответ. Возможно ли сделать один ловушек для каждой платформы, например, один файл JNI для Windows, один для Linux и один для Mac? Я не совсем хорош в C++, так что это возможно сделать в C? – Manitoba

+0

Да. AFAIK, что было бы вполне выполнимо. – aioobe

+1

Вот один проект, ориентированный на Linux: http://sourceforge.net/projects/jxgrabkey/ и вот один проект, ориентированный на окна: http: // melloware.com/products/jintellitype/index.html – aioobe

1

Это не может быть сделано , Никакая операционная система, достойная ее соли в сегодняшнем мире, не позволит вам просто записывать все нажатия клавиш

+0

... но есть много ключей-регистраторов, скажем Ubuntu. Конечно, вы должны быть root. – aioobe