Всплывающее окно в Java, когда USB-порт сканирует какой-либо ввод

У меня есть приложение, написанное на Java, работающее на машине (Linux/Windows). Я хочу, чтобы это приложение работало как фоновое приложение, чтобы оно не прерывалось при использовании других приложений в системе. Теперь я хочу открыть всплывающий экран и показать некоторые кнопки (для выполнения некоторых задач в зависимости от выбора), когда QR-код сканируется с помощью сканирования, подключенного к USB-порту. Когда это сканирование происходит, мое Java-приложение, которое запускает всплывающее окно, работает в системном трее.

--Edit--
Я использовал ключевые прослушиватели, чтобы идентифицировать сканирование штрих-кода и извлекать информацию из базы данных на основе того, что отсканировано. Но при сканировании моего приложения оно было открыто. Поэтому я прикрепил прослушиватели действий на уровне AWT, чтобы нажатия клавиш/сканирование фиксировались и отключались. Но теперь в текущем случае у меня не будет активных окон. ПОЭТОМУ МНЕ НУЖНО ЗАХВАТИТЬ ОТСКАНИРОВАННЫЙ ВВОД ВНУТРЕННИМ ОБРАЗОМ, КОГДА ПРИЛОЖЕНИЕ СВЕРНУТ В СИСТЕМНОМ ТРЕЕ.


person Deepak    schedule 12.04.2012    source источник
comment
Нет, я не знаю, с чего начать.. Возможно, если вы, ребята, дадите несколько советов для начала, я смогу уйти.. Проверьте мое редактирование..   -  person Deepak    schedule 12.04.2012
comment
Ваш сканер выглядит как клавиатура USB-HID?   -  person sarnold    schedule 12.04.2012


Ответы (2)


Я думаю, что единственный доступный вам путь — это захват общесистемных событий клавиатуры. Для Java есть библиотека: jnativehook. Но как вы собираетесь определять, какие события поступают именно с вашего HID-устройства, я не уверен.

Существует также JavaHIDAPI, проект любительского уровня, тестовый пример которого "привет, мир" не удался. с IOException на моей машине. Хорошая часть заключается в том, что весь код есть, включая родной C для Windows.

Наконец, я нашел это, очень хороший учебник по как разговаривать с HID в Windows.

person Marko Topolnik    schedule 17.04.2012
comment
Могу ли я сделать это с помощью какого-либо мониторинга портов?? поэтому я настрою свое приложение для мониторинга определенного USB-порта и запускать его из системного трея. Когда есть какие-то данные, отсканированные на сканере, подключенном к определенному USB-порту, активируйте приложение из системного трея и покажите экран приложения!! - person Deepak; 18.04.2012
comment
Я попытался использовать предложенную вами библиотеку, но она фиксирует все ключевые события. Это не то, чего я хочу. Я хочу фиксировать ключевые события, поступающие с определенного USB-порта, а не все. - person Deepak; 19.04.2012
comment
Да, именно так, как я опасался. Я предполагаю, что в этом API нет расширенной части, которая проверяет источник? - person Marko Topolnik; 19.04.2012
comment
есть ли другой способ добиться этого?? - person Deepak; 20.04.2012
comment
Вы можете ознакомиться с проектом JavaHIDAPI. Однако это проект любительского уровня, и их пример кода потерпел неудачу на моей машине. Однако там есть все исходники, включая родные исходники lib, поэтому, если вы знаете, что делаете, это может быть началом. - person Marko Topolnik; 20.04.2012
comment
Я также нашел это, это может быть полезно. В нем объясняется, как общаться с HIDS через JNA. Все равно придется запачкать руки. - person Marko Topolnik; 20.04.2012

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

person Catalina Island    schedule 12.04.2012
comment
почему внц?? я ничего удаленно не контролирую. Я просто хочу поговорить с базой данных при сканировании QR-кода. Но при сканировании java-приложение будет в системном трее!! - person Deepak; 17.04.2012
comment
Насколько я понимаю, безголовый режим (или VNC на старых JVM) будет работать, когда на консоли никого нет. Похоже, вы хотите, чтобы это работало для текущего пользователя, так что это не поможет. Прости. - person Catalina Island; 17.04.2012