Javaでキーリスナーを作成します。 Javaアプリにフォーカスがあるかどうかに関係なく、すべてのキー押下を追跡する必要があります。これは可能ですか?
可能ですが、 [〜#〜] jni [〜#〜] を利用した実装が必要です。これは常に移植可能ではありません。
Java System Hook は、Windows 32ビットおよび64ビットで動作するそのようなライブラリの1つです。
私は少し前にそのようなものを使用しました。 Java System Hook をご覧ください。
JNIを介して(Javaアプリケーション)だけでなく)グローバルキーを追跡します。
KeyListenerはデーモンスレッドとして起動しますが、これはアプリケーションをアライブ状態に維持しません。プログラムで別の非デーモンスレッドを実行する必要があります
例えば:
GlobalKeyListener globalKeyListener = new GlobalKeyListener();
globalKeyListener.addKeyListener(listener);
while (true) {
Thread.sleep(1000);
}
いいえ、Javaは、アクティブなウィンドウ以外ではキーストロークにアクセスできません。
これを実現するには、Javaとネイティブコードを組み合わせて、JNIを使用してネイティブコードを呼び出す必要があります。MicrosoftWindowsでは、GetAsyncKeyState(key)
を確認する必要があります。
非常に可能ですが、標準のJavaを使用しない場合、ネイティブレベルでオペレーティングシステムと対話する必要があります。
[〜#〜] jna [〜#〜] を使用してWindows User32 APIの SetWindowsHookEx 関数にアクセスするWindowsのトピックを次に示します。
いいえ、Javaはアクティブではない(フォーカスされた)ウィンドウでない場合、keystokesをリッスンしないため、それを行うことはできません。