私は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