2013-10-03 4 views
1

Я пытаюсь имитировать левый клик в другой программе, используя awt.robot со следующим кодом:Java.awt.robot mousepress не оказывает влияния

int mask = InputEvent.BUTTON1_DOWN_MASK; 
bot.mouseMove(x, y); 
bot.mousePress(mask); 
bot.mouseRelease(mask); 

В то время как это перемещается мышь на правильную часть экрана другая программа, похоже, не получает клик. Что я делаю не так?

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

Я попытался Thread.sleep() подождать 30-300 миллисекунд между mouseMove и mousePress, но это не повлияло.

Нужно ли использовать JNI и собственный API для Windows, чтобы достичь этого? Я на Windows 8.

+1

1) Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). 2) * «Я попробовал« Thread.sleep() '» * Попробуйте вместо этого ['delay (int)'] (http://docs.oracle.com/javase/7/docs/api/java/awt/Robot .html # delay% 28int% 29) или ['setAutoWaitForIdle (boolean)'] (http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html#setAutoWaitForIdle%28boolean% 29)/[ 'waitForIdle()'] (http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html#waitForIdle%28%29). –

ответ

1

Вы используете неправильную маску: InputEvent.BUTTON1_MASK

+0

Пробовал, не имеет никакого эффекта. – user2844372

+0

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

+0

Ну, тогда я думаю, что есть что-то противоречивое или несовместимое в ОС. Я не думаю, что вы делаете что-то неправильно в своем коде. Однако убедитесь, что другое приложение имеет фокус. Возможно, это часть проблемы. Чтобы усилить фокус, вы можете попробовать дважды щелкнуть. Однако будьте осторожны: щелчок дважды может выполнить два действия в приложении. –

0

вы пробовали bot.delay(n) между bot.mousePressed(mask) и bot.mouseReleased(mask)?

Смежные вопросы