我想找到SWT程序的窗口ID.
我以标准方式启动SWT shell.然后,我如何找到已创建的窗口的ID?该程序使用Compiz-Fusion窗口管理器在Fedora 10上执行(如果这有所不同).
代码帮助解释我的意思:
public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(); // find window ID here?? shell.open(); while (!shell.isDisposed()) { if(!display.readAndDispatch()) { display.sleep(); } } }
2009年3月6日更新 在查看并尝试了各种各样的事情之后(感谢VonC提供了以下建议),我发现了迄今为止有用的东西.这是非常狡猾的,但至少让我暂时继续其他一些工作.
从Control.embeddedHandle返回的ID接近窗口ID.它与可预测的偏移量不同.所以我的代码是:
public static void main(String[] args) { ... Shell shell = new shell(display, SWT.NONE); Composite e = new Composite(shell, SWT.EMBEDDED); long windowID = e.embeddedHandle - WINDOW_ID_MAGIC_NUMBER; e.dispose(); ....
WINDOW_ID_MAGIC_NUMBER是5+(在嵌入式复合之前添加到shell的小部件数).
到目前为止,我的系统似乎可靠.我还没有看到它是否会在不同的环境中崩溃.