2012-03-27 96 views
1

我在类Toolkit中找到了方法addAWTKeyListener,但是无法让窗口正常工作,无论窗口是否有焦点。我的代码如下:使用java.awt.Toolkit捕获全局按键

import java.awt.AWTEvent; 
import java.awt.Toolkit; 
import java.awt.event.AWTEventListener; 
import java.awt.event.KeyEvent; 


public class KeyTest { 

    public static void main(String[] args){ 
    Thread t = new Thread(){ 
     @Override 
     public void run() { 
     System.out.println("STARTING"); 
     Toolkit kit = Toolkit.getDefaultToolkit(); 
     kit.addAWTEventListener(new AWTEventListener(){ 

      @Override 
      public void eventDispatched(AWTEvent event) { 
      System.out.println("EVENT"); 
      if(event instanceof KeyEvent){ 
       KeyEvent kEvent = (KeyEvent) event; 
       System.out.println(kEvent.getKeyCode()); 
      } 
      } 

     }, AWTEvent.KEY_EVENT_MASK); 
     while(true); 
     } 
    }; 
    t.start(); 
    } 

} 

有什么我做错了吗?我明白,STARTING打印并且没有错误。偶是根本不叫。

+0

窗口必须得到焦点所有今天的本机操作系统,肯定是可能的,但后来我们也谈论防病毒相关的问题 – mKorbel 2012-03-27 06:41:44

回答

1

我可能是错的,因为我当然不是专家,但据我所知,你想要做什么在Java中是不可能的。

您是否尝试使用Java程序捕获键单击,但未创建窗口? Java的安全性的一部分,这是我可能错误的是,它只能监听由特定的Java程序创建的Java窗口内的事件。

因此,如果您试图制作一些在后台运行并且捕获按键的键盘记录器,那么它将无法做到这一点。

我希望我能给你一个更具体的答案,但我希望这有助于。

1

只是猜测,但你你的示例没有任何AWT窗口,所以我猜这就是为什么事件永远不会被解雇。

当你说“窗口是否有焦点”时,你的真实应用程序是否有你已经切掉的窗口,或者你在谈论Java控制台窗口还是类似的?