3

Linux のトップ レベル ウィンドウに関する情報を画面に出力したいと考えています。

xlib 関数を使用します。ルート ウィンドウから正常に再帰して、表示されているすべての要素に関するすべての情報を出力しました。

しかし、トップレベル ウィンドウだけが必要です。フィルタリングする良い方法が見つかりません。

ウィキペディアから:

トップレベル ウィンドウは、まさにルート ウィンドウの直接のサブウィンドウです。

その定義では、gnome-session、seahorse-daemon、notify-osd、またはアイコンなどのウィンドウがリストにあり、それらは必要ありません。

XmuClientWindow という関数も見つけましたが、その目的がわかりません。

4

2 に答える 2

4

あなたが何を望んでいるのか、私が正しく理解しているか見てみましょう。最上位のウィンドウは、ルート ウィンドウの直接の子であるか、または仮想ルート ウィンドウの一部のウィンドウ マネージャーを使用します。ルート ウィンドウ (ウィキペディア)を参照してください。その記事には、仮想ルート ウィンドウのリストを見つける方法も記載されています。ルートまたは仮想ルートで XQueryTree を使用して、子ウィンドウのリストを見つけることができます。

そのリストを取得したら、興味のあるウィンドウを見つけるために、おそらく多くの面倒なヒューリスティックを適用する必要があります。XmuClientWindow は、トップレベル ウィンドウに関連付けられているアプリケーション ウィンドウ (存在する場合) を通知します。アプリケーションはウィンドウを作成し、ウィンドウ マネージャはウィンドウの装飾やもの (最大化ボタン、閉じるボタン、サイズ変更ハンドル) を保持するために作成する最上位ウィンドウの子になるようにウィンドウを再親化します。拡張ウィンドウ マネージャーのヒントを読むクライアント/アプリケーション ウィンドウから、特別なウィンドウ (ドック、パネルなど) を扱っているかどうかなどがわかります。また、アプリケーション ウィンドウのウィンドウ マネージャーのヒント (XGetWMHints(3)、XGetWMNormalHints(3)、XGetWMSizeHints(3)) を調べて、興味があるかどうかを判断することもできます。おそらく気にしない。

トップレベルのウィンドウを調べる例については、VirtualBox Guest Additionsのシームレス コードを参照してください。

于 2011-05-24T12:42:22.390 に答える