Javaから任意のアプリケーションへのキーボードイベントの送信(オンスクリーンキーボード)

StackOverflow https://stackoverflow.com/questions/156912

質問

Javaを使用してオンスクリーンキーボードの開発に取り組んでいます。このキーボードには、考えられるすべてのキーに対して JComponent があります。ボタンでマウスダウンが検出された場合、現在フォーカスしているアプリケーションに特定のキーボードコードを送信します。キーボード自体は、装飾のない JFrame 内にあり、常に最前面に設定されています。

Robotクラスを使用して、ネイティブキューでこれらのキーボードイベントをシミュレートできることがわかりました。ただし、この場合、 JComponent を選択すると、キー押下が JFrame で受信され、他のアプリケーションで受信できなくなります。

どうすればオンスクリーンキーボードを「常にフォーカスなしで」維持できますか?別のアプローチを使用してキーを押すことは可能ですか?

役に立ちましたか?

解決 3

明らかにこれを行う唯一の方法は、Javaからネイティブへの変換を行うJNIレイヤーを持つことです。 Javaには、このような機能を提供する簡単な方法はありません。

これは、JNIを学びたい人のための小規模なサードパーティライブラリにとって興味深い概念かもしれません...

他のヒント

実際のキーボードとマウスのコマンドでゲームボットを制御しようとしたときに jnativehook を見つけました(より「人間らしく」なるため)。

これまでに見つけた唯一の解決策は、すべてのキーをJComponentにして(フォーカスを持たないようにする)、JFrameで次のプロパティを設定することです:

    setUndecorated(true);
    setFocusableWindowState(false);
    setFocusable(false);
    enableInputMethods(false);

ロボットクラスを使用する場合、キーをクリックすることで、フォーカスされているウィンドウにイベントを送信できます。唯一の制限は、同じ仮想マシンに属するウィンドウでのみ機能するようであり、他のシステムウィンドウではまったく機能しないことです。

ロボットクラスを使用する前に、ネイティブのsetfocus()またはsetactivewindow()関数を呼び出してフォーカスを移動しようとしましたか?

OSに依存しない方法でこれを行う方法を知りません。 Windowsについては知りませんが、Xプロトコルを介してXサーバーと通信することは可能でしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top