3

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

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

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

来自维基百科:

顶层窗口正是根窗口的直接子窗口。

有了这个定义,我的列表上有一些窗口,例如:gnome-session、seahorse-daemon、notify-osd 或图标,我不想要它们。

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

4

2 回答 2

4

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

一旦你有了那个列表,你可能需要应用许多讨厌的启发式方法来找到你感兴趣的窗口。XmuClientWindow 将告诉您哪个应用程序窗口(如果有)与您的顶级窗口相关联。应用程序创建窗口,并且窗口管理器它们重新定义为顶级窗口的子级,它们创建该窗口以保存窗口装饰和事物(最大化按钮、关闭按钮、调整句柄大小)。阅读扩展窗口管理器提示从客户端/应用程序窗口可以告诉您诸如您是否正在处理特殊窗口(停靠、面板等)之类的事情。您可能还想查看应用程序窗口上的窗口管理器提示(XGetWMHints(3)、XGetWMNormalHints(3)、XGetWMSizeHints(3))来决定您是否感兴趣 - 窗口管理器会创建很多您需要的临时窗口可能不在乎。

请参阅 VirtualBox Guest Additions 中的无缝代码,以获取查看顶层窗口的示例。

于 2011-05-24T12:42:22.390 回答
1
wmctrl -l 

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

于 2015-10-21T04:51:41.530 回答