
我正在運行 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
答案1
視窗焦點是視窗管理器的工作。我猜你正在使用一個。聚焦視窗的最佳方法是:
xdotool search --name 'Window title' windowactivate
xdotool 使用 2 種機制來傳送按鍵事件,XTEST
將事件傳送到目前焦點的擴展,以及XSendEvent()
將事件傳送到給定視窗。後者產生事件合成的標誌,一些應用程式認為這意味著存在安全風險,因此請忽略該事件。
但是,您仍然可以使用 xdotool 發送「真實」按鍵事件,但不得明確提供視窗。將對焦移至視窗後,使用
xdotool type Hello; xdotool key Return