4

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

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

画面キーボードを「常にフォーカスなし」に保つにはどうすればよいですか?キープレスを送信するために別のアプローチを使用することはおそらく可能ですか?

4

5 に答える 5

3

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

于 2012-01-12T16:41:39.177 に答える
2

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

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

于 2008-10-20T15:25:17.160 に答える
2

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

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

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

于 2008-10-09T14:24:40.047 に答える
0

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

于 2008-10-01T11:15:08.660 に答える
0

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

于 2008-10-11T15:14:18.637 に答える