2010-03-12 50 views
3

我想在屏幕上打印Linux下顶层窗口的信息。X Window系统上的顶层窗口

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

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

维基百科:

顶层窗口是完全根窗口的 直接子窗口。

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

我还发现一个功能:XmuClientWindow,但我不明白它的目标。

+0

那么问题是什么? XmuClientWindow的功能是什么?还有别的吗? – kazanaki 2010-03-16 10:36:15

+0

您正在获取顶层窗口的列表。你需要确切地说明你想要的是哪一个。也许只有不属于WM/DE的可见窗口。你可能想要分析它们的属性。请参阅http://standards.freedesktop.org/wm-spec/1.4/ar01s05.html – 2015-10-21 05:35:04

回答

4

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

一旦你有一个清单,你可能需要应用大量的讨厌的启发,找到你感兴趣的窗口。 XmuClientWindow会告诉你哪个应用程序窗口(如果有的话)与你的顶层窗口相关联。应用程序创建窗口,窗口管理器reparent它们是顶级窗口的子窗口,它们创建窗口装饰和事物(最大化按钮,关闭按钮,调整大小手柄)。从客户端/应用程序窗口中读取extended window manager hints可以告诉您是否正在处理特殊窗口(dock,panel等)。您可能还想查看应用程序窗口上的窗口管理器提示(XGetWMHints(3),XGetWMNormalHints(3),XGetWMSizeHints(3))以决定它是否令您感兴趣 - 窗口管理器会创建大量瞬态窗口大概不关心。

对于通过顶层窗户往外看一个例子见VirtualBox的客户添置的seamless code

0
wmctrl -l 

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