我正在使用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
但是,当应用程序不在焦点时,它似乎无法工作。即使应用程序不在焦点,我也希望它能够正常工作。我怎么能这样做?
答案 0 :(得分:2)
万一有人在寻找解决方案,如果你想要一个特定于Windows的解决方案,你可以使用JIntellitype。它可以直接让你注册全局热键。如果你需要一个独立于平台的解决方案,你可以使用Jnativehook,这不会直接帮助您注册全局热键,但您可以添加全局侦听器到您的应用程序,您可以使用它来实现热键。
答案 1 :(得分:0)
使用SWT全局(在您系统上的所有正在运行的应用程序中)没有此类解决方案。您将需要使用特定于平台的本机代码。