在java SWT中注册热键

时间:2014-08-13 11:39:52

标签: java swt hotkeys

我正在使用SWT设计一个java应用程序。我想为这个应用程序添加一个全局键监听器,这样当按下CTRL +'A'时,它会打印“应用程序正在运行”(这只是一个例子)。我想为这个app注册热键。我试过这段代码

public class HkeyDemo {

    public static void main(String[] args)
    {
        Display display=new Display();
        Shell shell=new Shell(display);

        shell.setLayout(new RowLayout());

        display.addFilter(SWT.KeyDown, new Listener() {
            public void handleEvent(Event e) {
                if (e.character == 0x01) {
                    System.out.printf("Space detected %s\n", e);
                }
            }
        });

        Button b1 = new Button(shell, SWT.PUSH);
        b1.setText("hello");
        b1.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent se) {
                System.out.printf("Button pressed %s\n", se);
            }
        });



        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();

    }

}

我从中获取了此代码 SWT Global KeyListener Button Focus Problem

但是,当应用程序不在焦点时,它似乎无法工作。即使应用程序不在焦点,我也希望它能够正常工作。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

万一有人在寻找解决方案,如果你想要一个特定于Windows的解决方案,你可以使用JIntellitype。它可以直接让你注册全局热键。如果你需要一个独立于平台的解决方案,你可以使用Jnativehook,这不会直接帮助您注册全局热键,但您可以添加全局侦听器到您的应用程序,您可以使用它来实现热键。

答案 1 :(得分:0)

使用SWT全局(在您系统上的所有正在运行的应用程序中)没有此类解决方案。您将需要使用特定于平台的本机代码。