SWT プログラムのウィンドウ ID を知りたいです。
標準的な方法で SWT シェルを起動します。作成されたウィンドウの 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+(埋め込みコンポジットの前にシェルに追加されたウィジェットの数) です。
これまでのところ、私のシステムでは信頼できるようです。別の環境で倒れるかどうかはまだわかりません。