X Window系统的顶级窗口

时间:2010-03-12 09:13:39

标签: c++ c x11 xlib

我想在屏幕上打印有关Linux下顶级窗口的信息。

我使用xlib函数。我成功地从根窗口递归,打印有关显示的所有元素的所有信息。

但我只需要顶级窗口。我没有找到任何好的方法来过滤。

来自维基百科:

  

顶级窗口就是   根窗口的直接子窗口。

根据这个定义,我的列表中有一些窗口:gnome-session,seahorse-daemon,notify-osd或icons,我不想要它们。

我也找到了一个函数:XmuClientWindow,但我不明白它的目标。

2 个答案:

答案 0 :(得分:4)

让我们看看我是否理解你想要的东西。顶级窗口是根窗口的直接子窗口,或者是虚拟根窗口的一些窗口管理器 - 请参阅Root Window (Wikipedia),您似乎已经找到了它。该文章还告诉您如何查找虚拟根窗口列表。您可以在根或虚拟根上使用XQueryTree来查找子窗口列表。

一旦你有了这个列表,你可能需要应用许多令人讨厌的启发式来找到你感兴趣的窗口。 XmuClientWindow将告诉您哪个应用程序窗口(如果有)与您的顶级窗口相关联。应用程序创建窗口,窗口管理器reparent它们是顶级窗口的子项,它们创建它们以保存窗口装饰和事物(最大化按钮,关闭按钮,调整大小句柄)。从客户端/应用程序窗口读取extended window manager hints可以告诉您是否正在处理特殊窗口(停靠,面板等)。您可能还想查看应用程序窗口(XGetWMHints(3),XGetWMNormalHints(3),XGetWMSizeHints(3))上的窗口管理器提示,以决定它是否感兴趣 - 窗口管理器创建了许多瞬态窗口,您可能不在乎。

有关查看顶级窗口的示例,请参阅VirtualBox Guest Additions中的seamless code

答案 1 :(得分:0)

wmctrl -l 

这个简单的命令将列出root下的所有顶层窗口。