Генерация вывода клавиатуры в программе Java, работающей как служба Windows - PullRequest
0 голосов
/ 23 января 2019

Я создал простое автономное Java-приложение (JAR), которое подключается к сканеру штрих-кода Honeywell через виртуальный COM-порт (используя библиотеки RxTx для настройки COM-соединения).

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

Так что, если я запускаю программу и затем сканирую значение «A», приложение преобразует его в «B», и когда блокнот активен (или какое-либо другое поле ввода / программа), »B "выводится так, как если бы он был первоначально отсканирован сканером.

Эта программа отлично работает, когда запускается как файл JAR (или упаковочный файл bat).Однако при обёртывании этого файла JAR / BAT в качестве службы Windows (с использованием JSW Community Edition или YAJSW) программа будет работать идеально, , но не будет выводить «имитированные» нажатия клавиш, выполненные в Robot.class.

Я даже использовал библиотеки JNA с методом sendInput() (в качестве замены для класса Robot), чтобы создавать нажатия клавиш как можно ближе к уровню ОС, как это возможно, но это также не сработало... Я также пытался сделать сервис интерактивным , но это тоже не сработало.В настоящее время у меня заканчиваются опции.

Итак, мой вопрос: правильно ли, что вы не можете генерировать события нажатия клавиатуры при работе в качестве службы Windows?Я мог бы предположить, что это может быть большой проблемой безопасности, и, возможно, поэтому это запрещено.

Любая обратная связь или возможное решение будет очень приветствоваться!Большое спасибо заранее!

1 Ответ

0 голосов
/ 23 января 2019

Это спецификация, называемая изоляцией сеанса 0, которая была представлена ​​в Windows Vista.
Программы, действующие как WindowsService, не имеют пользовательского интерфейса.
Пожалуйста, обратитесь к этим статьям и документам.

Совместимость приложений - изоляция сеанса 0
Изоляция сеанса 0 - Центр загрузки Microsoft

Что такое изоляция сеанса 0? Что мне нужно знать об этом?
Сеанс 0 Изоляция и безопасный рабочий стол: Windows 7 AppCompat Series


Дополнительно
Пожалуйста, попробуйте зарегистрироваться в планировщике заданий.
Регистрация задачи в планировщике задач Windows в Java

В этом случае он может оказаться неэффективным, если только он не «Выполнен только при входе пользователя в систему».
Это статья о Windows Server.
показать окно программы расписания планировщика заданий.

Однако есть вероятность, что он не будет работать, даже если вы это сделаете.
Простая программа на С ++ не запускается как задание по расписанию (интерактивная / неинтерактивная проблема?)

...