X Window系统中的顶层窗口

3
我想在屏幕上打印有关Linux下顶级窗口的信息。我使用xlib函数。我成功地从根窗口递归,打印出所有显示元素的所有信息。但我只需要顶级窗口。我找不到任何好的过滤方法。根据维基百科的定义,顶级窗口正是根窗口的直接子窗口。根据这个定义,我的列表中有一些窗口,如gnome-session、seahorse-daemon、notify-osd或图标,我不想要它们。我还发现了一个函数:XmuClientWindow,但我不理解它的目的。

那么问题是什么?XmuClientWindow的功能是什么?还有其他问题吗? - kazanaki
你正在获取一个顶层窗口列表。你需要明确指出你想要哪一个。也许只有那些不属于WM/DE的可见窗口。你可能需要分析它们的属性。请参阅http://standards.freedesktop.org/wm-spec/1.4/ar01s05.html。 - n. m.
2个回答

4

让我们看看我是否正确地理解了您的要求。顶级窗口是根窗口的直接子窗口,或者在某些窗口管理器中是虚拟根窗口的子窗口 - 请参见根窗口(维基百科),您似乎已经找到了它。该文章还告诉您如何找到虚拟根窗口的列表。您可以在根或虚拟根上使用XQueryTree来查找子窗口的列表。

一旦你获得了那个列表,你可能需要应用许多令人不快的启发式算法来查找你感兴趣的窗口。XmuClientWindow会告诉你和你的顶层窗口(如果有)关联的应用程序窗口。应用程序创建窗口,然后窗口管理器重新定位它们作为自己创建的顶层窗口的子窗口,以容纳窗口装饰和其他内容(最大化按钮、关闭按钮、调整大小句柄)。从客户端/应用程序窗口中读取扩展窗口管理器提示可以告诉你一些信息,例如你是否正在处理特殊窗口(如停靠、面板等)。您还可以查看应用程序窗口上的窗口管理器提示(XGetWMHints(3),XGetWMNormalHints(3),XGetWMSizeHints(3)),以确定它是否对您感兴趣 - 窗口管理器会创建很多短暂的窗口,您可能不关心。

请参见VirtualBox Guest Additions中无缝代码的示例,了解查看顶层窗口的方法。


1
wmctrl -l 

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接