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