怎样监听全局快捷键,就像QQ一样按"Ctrl+Alt+z"组合键就显出界面的。我尝试过添加:
Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.addAWTEventListener(new testListener(), AWTEvent.KEY_EVENT_MASK);
监听:
class testListener implements AWTEventListener {
public void eventDispatched(AWTEvent event) {
if(){Do}
}
}
可是怎么样都捕捉不出"Ctrl+F9",最多捕捉到F9。疑问有二:
1.监听全局是不是错了?
2.怎么样才能捕捉到组合键并且判断、响应?如果方便最好能给出一个例子,谢谢啦!大虲:我注册不久,没来得及发帖,没分给,对不住!

解决方案 »

  1.   

    哎,这种感觉不太好受啊……
    我以前也是(虽然也才注册不久),问一个问题等很久都等不到消息……
    看来是遇上难兄了,呵呵,我也尽点微薄之力吧。
    你说的情形我没试过,但是我想我能提供点关于组合键的经验。请参见文档java.awt.event.KeyEvent;类的描述
    要监听一个键是否有其他键修饰(主要是指CTRL,ALT,SHIFT),在产生的KeyEvent对象有个方法
    getModifier();具体是怎样我也记不太清了,大概吧,他将返回按键同时的修饰键情况。比如,
    KeyListener kl=new KeyAdapter()
    {
        public void keyPressed(KeyEvent e)
        {
            if(e.getKeyCode==KeyEvent.VK_F9 && e.getModifier()==KeyEvent.CTRL_MASK)
            {
                //要做的事
            }
        }
    };
    以上代码可能有问题(主要是getModifier()那里),因为我现在没有文档,也懒得下载,请自行核对
    }
      

  2.   

    组合键应该这样写
    e.getModifier() & (KeyEvent.VK_F9 | KeyEvent.CTRL_MASK) = e.getModifier()全局监听的话 不用JNI估计实现不了  应该是注册快捷键到系统的
      

  3.   

    VC++ 实现起来方便些,毕竟系统方面的编程不是java的强项。 比较赞同insiku的观点 "不用JNI估计实现不了"
      

  4.   

    Java本身是做不了键盘的全局监听的(就是在失去焦点的情况下监听键盘),javaGUI中的鼠标,键盘监听器都是在组件获得焦点时才会触发的!
    所以用单纯的Java做全局监听是做不了的,不过可以使用调用jni的方式实现!有一个开源项目正是封装了jni的复杂麻烦的调用操作。我试用了一下,感觉很不错!
    我的百度博客里面有使用的情况。http://hi.baidu.com/wzwahl36/blog/item/79b47813ed0e87c5f7039efd.html