Перехват и модификация событий мыши для стороннего приложения?

#java #mouseevent

#java #mouseevent

Вопрос:

Как я могу перехватывать и изменять события мыши (координаты x / y, ускорение и т. Д.) Через Java, Прежде чем они попадут в стороннее приложение?

Приложение известно заранее (так что возможно что-то вроде «java MyApp 3rdPartyApp», если это поможет). Обратите внимание, что стороннее приложение может быть очень ресурсоемким.

Я думаю, я спрашиваю, как я могу создать Java-приложение, которое служит связующим звеном между реальными событиями мыши и сторонним приложением, чтобы стороннее приложение получало измененные события, но не исходные, отправленные ОС? Возможно ли это вообще с Java?

Комментарии:

1. Какой уровень графического интерфейса вы используете AWT / SWING, SWT, other?

2. Я еще не решил, поэтому подойдет любое решение, специфичное для графического интерфейса.

3. У меня нет реального ответа, только предположение: может быть, вы могли бы перехватить MouseListeners с помощью aspects.

Ответ №1:

У вас есть 2 чистых Java-решения.

Во-первых, вы можете подключиться к очереди событий AWT и получить все события пользовательского интерфейса: Toolkit.getDefaultToolkit().getSystemEventQueue() к сожалению, я не уверен, что вы можете изменять эти события, но вы можете их прочитать и смоделировать события.

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

Комментарии:

1. Ах. Таким образом, накладывая на него окно, стороннее приложение не получает события мыши (или, я полагаю, любые другие события), потому что оно не в фокусе? Как работает робот с точки зрения этого фокуса? И как мне получить некоторую базовую информацию о стороннем приложении, таком как dimensions?