如题。在JAVA GUI中,有没有好的办法屏蔽系统热键,并作出响应(可选)?
比如屏蔽Windows键。如果有JNI也可以考虑,最好是一个包,能够支持Windows系列和Linux系列平台的。请发邮件:[email protected]

解决方案 »

  1.   

    如果有JNI也可以考虑,最好是一个包,能够支持Windows系列和Linux系列平台的。
    你这不是矛盾吗,屏蔽WINDOWS热键,着么又跑到LINUX下面去了,况且这种开源至少我没找到过
    屏蔽的话,捕捉热键,不做响应就可以了    static {
            try {
                Toolkit toolkit = Toolkit.getDefaultToolkit();
                toolkit.addAWTEventListener(new AWTEventListener() {
                    public void eventDispatched(AWTEvent e) {
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F1)
                            System.out.println("F1");
                        if (((KeyEvent) e).getKeyCode() == KeyEvent.VK_F2)
                            System.out.println("F2");
                    }
                }, AWTEvent.KEY_EVENT_MASK);
                Thread thread = new Thread(new Runnable() {
                    public void run() {
                        try {
                            File music = new File(iSystemConstants.muiscfile);
                            Player player = new Player(new FileInputStream(music));
                            player.play();
                        } catch (FileNotFoundException ex) {
                        } catch (JavaLayerException ex) {
                        }                }
                });
                //thread.start();            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, e.getMessage(), "ERROR",
                                              JOptionPane.ERROR_MESSAGE);
            }
        }
      

  2.   

    ls的,只能对win键作出响应,但是不能拦截啊
    lz的意思是程序失去焦点后也要能拦截吧?
      

  3.   

    CrazyGou(阿狗)(...) ( ) ls的,只能对win键作出响应,但是不能拦截啊
    lz的意思是程序失去焦点后也要能拦截吧?
    不是的,只是在获取焦点的情况下屏蔽Windows键@
      

  4.   

    lixiaoxue85(蛮野蛮) ( ) 信誉:97  你的例子谢谢了,只是不能屏蔽。
      

  5.   

    TO inthistime(共此时) ( ) 信誉:95    Blog   加为好友 
    你的屏蔽意思不是不响应?Windows键是指比如笔记本上的无线开关这种键不
      

  6.   

    不是的,不指开关之类的。给你举个例子:
    比如在linux和windows下Alt+Tab都是窗口切换,现在我设计一个窗口,都屏蔽诸如此类的键或者组合键,不让系统响应而让本窗口响应。
      

  7.   

    屏蔽所有系统热键    步骤如下:    (1)打开注册表编辑器。    (2)选择HKEY_CURRENT_USER\software\Microsoft\windows\CurrentVersion\Policies\Explorer子键。    (3)新建一个数据类型为双字节的键值项,命名为NoWinKeys,将其键值设为“1”。    (4)重启计算机后生效。
      

  8.   

    pdvv(我爱花猫) ( ) 信誉:100我晕,还要重启电脑,你太过火了。
      

  9.   

    改注册表?????????????????
    那还用JAVA做????????
      

  10.   

    alex_lu() ( ) 信誉:100    Blog   加为好友 
    改注册表?????????????????
    那还用JAVA做????????
      ===>why not?
      

  11.   

    这两天也做了点类似的东西,类似QQ的热键截图。 WIndow的话只能用hook了, 不过好像swt也支持什么钩子。
    看今天能不能写好再写个文章大伙瞄瞄的。
    楼上用注册表的确实也是个不错的方法:)
      

  12.   

    http://community.csdn.net/Expert/TopicView3.asp?id=5492036
    顺便来顶顶我的帖吧, 让我好结帖
      

  13.   

    http://blog.csdn.net/zealVampire/archive/2007/04/30/1593389.aspx来瞄瞄了,基本完成了,希望对你有帮助了。 不过屏蔽win系统键我不知道是不是要使用WH_KEYBOARD_LL底层的钩子,这个我也是一直没调出来的, 希望你也早点弄出来拉。51快乐哦各位。 别说我要挟你哦:) 最多我结帖多分你分呵呵
      

  14.   

    最好是在系统下设置,直接手工操作就行了。如果对系统熟悉也可以在java代码里面写这样的命令。
    Runtime.getRuntime().exec()应该可以。试试吧!
      

  15.   

    JAVA一般是不可能实现的,除非调用JNI,然后WINDOWS的钩子
      

  16.   

    我同意用JNI来实现,可是怎么去实现?
      

  17.   

    那要些系统级的hook程序了,程序运行时加载一个动态库,就像代理一样,遇到那个键程序决定怎么处理,是按原本方式还是按自定义的方式。
      

  18.   

    用JNI及Runtime都失去了在多个平台运行的优势,所以还是捕捉该KEY的CODE直接处理比较实在又方便