我想找到我的 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+(在嵌入复合之前添加到外壳的小部件数量)。
到目前为止,它在我的系统上似乎是可靠的。我还没有看到它是否会在不同的环境中摔倒。