Блокируйте все остальные входные данные для приложения и управляйте им из оболочки в Java - PullRequest
0 голосов
/ 27 апреля 2010

У меня есть приложение для Windows со сложным графическим интерфейсом, который я хотел бы скрыть от пользователей. Для этого я хотел бы создать оболочку с чрезвычайно простым интерфейсом, который перекрывает это приложение и автоматизирует ряд действий, когда пользователь нажимает одну кнопку на оболочке. (Надеюсь, «обертка» - это правильный термин.) Можно ли использовать Java для блокировки ввода в основное приложение, чтобы пользователи не могли случайно испортить автоматизацию? Как бы я пошел по этому поводу? Кроме того, как я могу автоматизировать нажатия клавиш и клики в приложении, не угоняя мышь? Возможно ли это на Java?

Я посмотрел на java.awt.Robot , но похоже, что он похитил мышь. Я также посмотрел на AutoIT , но он также захватывает мышь и не интегрируется с Java.

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

1 Ответ

3 голосов
/ 27 апреля 2010

Я рекомендую автоматизацию через GUI только в крайнем случае, если у вас действительно нет другой альтернативы.

Если есть API, который предоставляет ваше приложение, я бы попробовал использовать это. Например, если графический интерфейс реализован в одной DLL, а логика - в другой, вы можете использовать JNA для загрузки логики DLL вашего приложения и вызова функций приложения непосредственно из Java. Еще лучше было бы, если бы ваше приложение предоставляло интерфейс COM / OLE - есть много Java <> COM-мостов, которые позволят вам вызывать этот интерфейс напрямую, например. Jacob .

Если у вас действительно нет выбора, кроме как автоматизировать через графический интерфейс, то вот как это сделать:

  1. Используйте JNA для доступа к API оболочки Windows. Затем вы можете использовать ShellExecute , чтобы запустить упакованное приложение. В частности, передача SW_HIDE в качестве оконного режима должна помочь гарантировать, что приложение не появится.
  2. Используйте JNA для доступа к Windows API FindWindow , чтобы найти окно вашего приложения. Вы также можете сделать его невидимым с помощью API ShowWindow , на случай, если шаг 1 не сработал (не все приложения написаны для использования параметра nCmdShow.)
  3. Теперь вы можете отправлять сообщения в окно приложения, используя PostMessage . Вы можете отправлять нажатия клавиш и события мыши, используя сообщения Windows. Например. См. WM_KEYUP , WM_LBUTTONDOWN .

Поскольку окно приложения в оболочке стало невидимым, вам не нужно «блокировать» это приложение. Пользователь просто не может получить доступ к его графическому интерфейсу. Но вы все равно можете программно отправлять входные данные.

...