Eclipse 4:禁用本机alt-f4行为

时间:2013-11-05 14:52:20

标签: swt eclipse-rcp e4

是否有人知道是否可以在e4应用程序中禁用或覆盖“alt + f4”(在Windows上关闭应用程序)的本机行为? 有什么建议的解决方案来实现这一目

最好的问候

2 个答案:

答案 0 :(得分:0)

我的解决方案是 NOT 纯SWT解决方案。 仅适用于Windows 。但你提到了Windows,如果你只针对一个平台,这就足够了。它使用来自SWT的内部代码,但它映射到Microsoft API记录的Windows API,因此不会更改。

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

    shell.addListener(SWT.Close, new Listener() {
        @Override
        public void handleEvent(Event event) {
            if (OS.GetKeyState(OS.VK_MENU) < 0 && OS.GetKeyState(OS.VK_F4) < 0) {
                event.doit = false;
            }
        }
    });

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

答案 1 :(得分:0)

找到了解决方案,但我不满意。 创建了一个插件: 即在UIEvents.UILifeCycle.APP_STARTUP_COMPLETE主题上注册事件处理程序。 然后以某种方式从主题元数据中检索shell并在显示器上注册过滤器。

@PostConstruct
void hookListeners() {
    eventHandler = new EventHandler() {



        @Override
        public void handleEvent(Event arg0) {
            MElementContainer property = (MElementContainer) arg0.getProperty("org.eclipse.e4.data");
            final Shell shell = (Shell) property.getSelectedElement().getWidget();
            final Display display = shell.getDisplay();
            display.addFilter(SWT.Close, new Listener() {

                @Override
                public void handleEvent(org.eclipse.swt.widgets.Event event) {

                    if (!MessageDialog.openQuestion(shell, "Exit",
                            "Do you really want to close the Application?")) {
                        //see api documentation display.addFilter( 
                         event.type = SWT.NONE;
                         event.doit = false;

                    }

                }
            });             
        }
    };
eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, eventHandler);
}

这个解决方案对我来说似乎不对,所以如果有人有更好的解决方案请分享: - )