
Я использую Fedora 22 (Linux) и имею приложение Java, написанное другими, которому я хочу отправлять нажатия клавиш. Я пробовал использовать xdotool разными способами, но не могу ни установить фокус на приложение Java, ни отправить ему нажатия клавиш.
Приложение запускается с помощью javaws с помощью следующей командной строки:
javaws -J-XX:MaxPermSize=512M -J-d64 -J-Xms1G -J-Xmx1G /path/to/java/file
Моя первая попытка отправить ему нажатия клавиш была сделана с помощью этой команды:
xdotool search --name 'Window title' windowraise windowfocus --sync key H e l l o Return
Но ничего не произошло. Окно Java не получило фокус и не увидело мои нажатия клавиш.
Поэтому я посмотрел PID процесса Java и попытался идентифицировать процесс по его PID.
xdotool search --pid 1234 windowraise windowfocus --sync key H e l l o Return
Тот же результат. Наконец, я попробовал идентифицировать окно с помощью 'selectwindow'.
xdotool selectwindow windowraise windowfocus --sync key H e l l o Return
После ввода команды курсор изменился на квадрат. Я переместил мышь в окно Java и щелкнул, но это тоже не сработало.
Для дальнейшего исследования я запустил другое приложение Java с помощью следующей команды:
java -jar appname.jar
xdotool также не смог установить фокус или отправить нажатия клавиш в это окно.
Прочитав документацию xdotool, я знаю, что некоторые программы не принимают его входные данные. Могу ли я что-то сделать, например, передать различные аргументы командной строки этим приложениям Java, чтобы заставить их слушать нажатия клавиш xdotool?
Вот некоторая информация о версиях Java и xdotool, которые я использую:
$ java -version
openjdk version "1.8.0_65-debug"
OpenJDK Runtime Environment (build 1.8.0_65-debug-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01-debug, mixed mode)
$ xdotool --version
xdotool version 2.20110530.1
решение1
Фокусировка окна — это работа оконного менеджера. Я предполагаю, что вы используете один из них. Лучший способ сфокусировать окно:
xdotool search --name 'Window title' windowactivate
xdotool использует 2 механизма для отправки ключевых событий, XTEST
расширение для событий для отправки в текущий фокус и XSendEvent()
для отправки событий в заданное окно. Последнее генерирует события ссинтетическийфлаг, который некоторые приложения считают угрозой безопасности, поэтому игнорируйте событие.
Однако вы все еще можете отправлять «реальные» ключевые события с помощью xdotool, но вы не должны явно указывать окно. После перемещения фокуса на ваше окно используйте
xdotool type Hello; xdotool key Return