2010-01-28 5 views
2

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

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

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

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

ответ

2

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

+0

Было бы полезно, чтобы увидеть код, о том, как решить эту проблему. –

0

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

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

0

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

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

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