使用 xdotool 將擊鍵定向到 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

答案1

視窗焦點是視窗管理器的工作。我猜你正在使用一個。聚焦視窗的最佳方法是:

xdotool search --name 'Window title' windowactivate

xdotool 使用 2 種機制來傳送按鍵事件,XTEST將事件傳送到目前焦點的擴展,以及XSendEvent()將事件傳送到給定視窗。後者產生事件合成的標誌,一些應用程式認為這意味著存在安全風險,因此請忽略該事件。

但是,您仍然可以使用 xdotool 發送「真實」按鍵事件,但不得明確提供視窗。將對焦移至視窗後,使用

xdotool type Hello; xdotool key Return

相關內容