使用java.awt.Toolkit捕获全局按键
问题描述:
我在类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打印并且没有错误。偶是根本不叫。
答
我可能是错的,因为我当然不是专家,但据我所知,你想要做什么在Java中是不可能的。
您是否尝试使用Java程序捕获键单击,但未创建窗口? Java的安全性的一部分,这是我可能错误的是,它只能监听由特定的Java程序创建的Java窗口内的事件。
因此,如果您试图制作一些在后台运行并且捕获按键的键盘记录器,那么它将无法做到这一点。
我希望我能给你一个更具体的答案,但我希望这有助于。
答
只是猜测,但你你的示例没有任何AWT窗口,所以我猜这就是为什么事件永远不会被解雇。
当你说“窗口是否有焦点”时,你的真实应用程序是否有你已经切掉的窗口,或者你在谈论Java控制台窗口还是类似的?
窗口必须得到焦点所有今天的本机操作系统,肯定是可能的,但后来我们也谈论防病毒相关的问题 – mKorbel 2012-03-27 06:41:44