восстановить фокус после java.awt.Robot.keyPress () / mousePress () - PullRequest
2 голосов
/ 28 января 2010

Я пишу приложение, которое управляет другим приложением, используя только клавиатуру. Более конкретно, приложение имитирует нажатия клавиш и щелчки мыши при нажатии определенной клавиши на клавиатуре. Например, нажатие на клавишу «x» имитирует щелчок мышью по [X] в правом углу rop, после чего следует небольшой сон в течение 2 секунд и «enter» для подтверждения диалога выхода. Довольно легко. Я разрабатываю это приложение на Java.

Посылка нажатия клавиши или щелчка мышью очень проста с java.awt.Robot. Я столкнулся с одной маленькой проблемой. Скажем, я настроил ключ, который будет нажимать где-то на экране. Проблема в том, что последовательные нажатия клавиш больше не перехватываются, так как мое приложение потеряло фокус, вызванный щелчком мыши за пределами его окна.

Мой вопрос сейчас таков: как лучше всего убедиться, что мое основное приложение сохраняет фокус? Есть ли способ снова сфокусировать мое приложение после отправки нажатий клавиш и щелчков мышью? Есть ли лучший способ?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 30 октября 2010

Если ваше приложение потеряло фокус. поскольку вы или ваш робот перешли в другое место, робот должен снова щелкнуть приложение перед отправкой нового ключа. В c / c ++ вы можете сосредоточиться на приложении (нетривиальная задача), а не на Java!

0 голосов
/ 14 мая 2013

Мне удалось предотвратить потерю фокуса приложениями на Java.

Поместив WindowFocusListener в рамку (или диалоговое окно) и вызвав setVisible(false), а затем setVisible(true) в windowLostFocus, компонент снова появится, как только исчезнет (не самое красивое решение, но оно работает) .

К тому времени, позвонив по номеру component.requestFocus(), ваш робот сможет продолжить с того места, на котором остановился

0 голосов
/ 30 октября 2010

Возможно, вы захотите взглянуть на Component.requestFocus () , чтобы узнать, можете ли вы делать то, что вы хотите.

Имейте в виду, однако, что фокусировка окна имеет очень платформо-зависимое поведение, поэтому вам, вероятно, потребуется провести немало тестирования, чтобы убедиться, что ваш код делает то, что вы хотите при любых обстоятельствах.

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