【问题标题】:Top level window on X Window SystemX Window System 上的顶级窗口
【发布时间】:2010-03-12 09:13:38
【问题描述】:

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

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

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

来自维基百科:

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

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

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

【问题讨论】:

  • 那么问题是什么? XmuClientWindow的作用是什么?还有什么?
  • 您将获得一个顶级窗口列表。您需要准确说明您想要哪些。也许只有不属于 WM/DE 的可见窗口。您可能需要分析它们的属性。见standards.freedesktop.org/wm-spec/1.4/ar01s05.html

标签: c++ c x11 xlib


【解决方案1】:

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

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

请参阅 VirtualBox Guest Additions 中的 seamless code,了解查看顶层窗口的示例。

【讨论】:

    【解决方案2】:
    wmctrl -l 
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 1970-01-01
      • 2012-12-16
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多