我想在屏幕上打印有关Linux下顶级窗口的信息。
我使用xlib函数。我成功地从根窗口递归,打印有关显示的所有元素的所有信息。
但我只需要顶级窗口。我没有找到任何好的方法来过滤。
来自维基百科:
顶级窗口就是 根窗口的直接子窗口。
根据这个定义,我的列表中有一些窗口:gnome-session,seahorse-daemon,notify-osd或icons,我不想要它们。
我也找到了一个函数:XmuClientWindow,但我不明白它的目标。
答案 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下的所有顶层窗口。