我想找到我的SWT程序的窗口ID。来自Java 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+(在嵌入式合成之前添加到壳的小部件的数量)。
到目前为止,我的系统似乎很可靠。我还没有看到它是否会在不同的环境中崩溃。
刚刚更新了我的答案一些更多的线索......虽然没有“确定性”。 – VonC 2009-03-05 07:04:00