JavaのSwing,AWTについて質問です。


ウィンドウがアクティブでない状態でもキーイベントを受け取りたいのですが可能ですか?
可能な場合はどのような実装をすれば実現できるのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/05/27 02:15:08
  • 終了:2012/06/03 02:20:03

回答(2件)

id:oil999 No.1

oil999回答回数1728ベストアンサー獲得回数3202012/05/27 09:31:53

ポイント100pt

できません。
KeyListenerを使うことになりますが、そのウィンドウにフォーカスが無いと作用しないからです。

id:gizmo5 No.2

gizmo5回答回数484ベストアンサー獲得回数1382012/05/27 12:47:02

ポイント100pt

AWT や Swing の範囲だけではできないと思います。
それだけだと、回答になってないような気もするので、実現方法をいくつか。

SWT Win32 Extension

http://feeling.sourceforge.net/
SWT は、割りと有名だと思います。

http://rainbowdevil.jp/?p=632
ここに載ってるのは、マウスのフックですが、キーボードもこんな感じでいけるはず。

Keyboard_LLHook.addHookInterceptor(new Keyboard_LLHookInterceptor() {
        public InterceptorFlag intercept(Keyboard_LLHookData hookData) {
            switch (hookData.getWParam()) {
                case Keyboard_LLHookData.WM_KEYUP:
                    ...
                    return InterceptorFlag.TRUE;
            }
            return InterceptorFlag.FALSE;
        }
    });
Keyboard_LLHook.installHook();

javadoc は、こちら
http://svn2.assembla.com/svn/screendump-pub/swt/doc/win%2032%20extension/index.html

ほかにも、ここが参考になるかも。
http://monogusadev.blogspot.jp/2011/06/java.html


jnativehook

jnativehook というライブラリもあります。
http://code.google.com/p/jnativehook/

http://code.google.com/p/jnativehook/source/browse/trunk/src/org/dotnative/globalhook/keyboard/Driver.java?spec=svn55&r=55
サンプルがなかなか見当たらないんですが、テスト用のプログラム(?)がアーカイブされてます。


JIntellitype API

JIntellitype API というのもあります。
Hot キーのフックを簡単にできるみたい。
http://melloware.com/products/jintellitype/index.html
http://melloware.com/products/jintellitype/quick-start.html

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません