Java
使用 xdotool 將擊鍵定向到 Java 視窗是否有問題?
我正在執行 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 視窗沒有獲得焦點或看到我的擊鍵。
因此,我查找了 Java 程序的 PID,並嘗試通過其 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
視窗焦點是視窗管理器的工作。我想你正在使用一個。聚焦視窗的最佳方法是:
xdotool search --name 'Window title' windowactivate
xdotool 使用 2 種機制來發送關鍵事件,事件的
XTEST
擴展發送到目前焦點,以及XSendEvent()
發送事件到給定的視窗。後者生成帶有合成標誌的事件,某些應用程序認為這意味著它存在安全風險,因此忽略該事件。但是,您仍然可以使用 xdotool 發送“真正的”關鍵事件,但您不能顯式提供視窗。將焦點移到視窗後,使用
xdotool type Hello; xdotool key Return