• 締切済み

バックグラウンドでキー監視

 こんにちは。c#初心者兼、"java始めました" です。  題の通り、知りたいのはフォーカスがない状態、というか、バックグラウンド・常駐状態で押されたキーを取得する方法です。  c#ではGetAsyncKeyStateメソッドを使えば出来ましたが、javaはそれらしいものが見つからなというか、見つからなくはないのですが、使い方がよくわかりません。  それ以外はKeyListenerを使う(フォーカスがないと使えない)パターンの物しかなく、目的のものが見つかりませんでした。  どなたか、わかる方いらっしゃいましたら教えてください。

みんなの回答

回答No.3

失礼しました。バックグラウンドなのでウィンドウ自体にフォーカスないんですよね・・。 適切なタイミングでrequestFocusInWindow(true)→requestFocus()ぐらいしか思いつきません。

回答No.2

大分時間が経っているので見ているか分かりませんが・・・・。 >フォーカスがない状態、というか、バックグラウンド・常駐状態で押されたキーを取得する方法です。 GUIですかね?GUIでしたらComponentクラスにrequestFocus()がありますので、 ループ中のスレッド内にてListenerが実装されたオブジェクトに対して.requestFocus()をすればいいのでは? フォーカスが欲しいとのことなので。 特にバックグラウンドやフォアグラウンド関係なく私はこれを使っています。 他に良い方法があれば私も知りたいです。(笑) 略して書きます。 KeyListener,Runnableが実装されたクラスとして。 public Sample extends JFrame implements KeyListener,Runnable { Sample sample; public Sample() { this.sample = new Sample(); } public void run() { if(hogehoge > 0) sample.requestFocus(); //又は入力受付したいクラスのオブジェクト内でしたら、ただ単にrequestFocus()すればいいかと。 } } 前提としてGUIでの実装を仮定してます。 GUI以外だと・・・。うまい方法が分かりませんが、Componentクラスを継承して無理やりrequestFocus()使うとか・・? 追記: フォーカスが無いままの入力はjavaでは出来なかったはずですが・・・。どうなんでしょう。もちろんフォーカスがオブジェクトに対して当たっていれば普通に入力できますが。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.1

見つからなければ、ポータビリティーを犠牲にしてJNIか何かを使って実装するしかないのでは。

関連するQ&A