我想找到我的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