X11:列出顶级窗口

2024-01-29

到目前为止我发现了两种方法:

  1. 对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),列出每个直接子窗口。递归地搜索每个直接子窗口以查找窗口WM_STATE财产;该窗口成为直接子窗口的顶级应用程序窗口,并且所有递归都可以停止。如果直接子级的层次结构中没有窗口具有WM_STATE属性,假设直接子级本身就是顶级应用程序窗口。

    • Use xcb_get_property, and xcb_query_tree(尽管名字只列出了直系孩子)。

    • 这是什么xls客户端通过 XCB 使用(或多或少与上面相同的算法)。

    • 要求:需要 ICCCM(窗口管理器)支持WM_STATE.

  2. 对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),获取“_NET_CLIENT_LIST”属性,该属性列出了窗口管理器管理的所有顶级应用程序窗口。

    • Use xcb_get_property.

    • 这是什么wmctrl通过 Xlib 使用。

    • 需要窗口管理器维护该列表。有些窗口似乎逃脱了列表 https://stackoverflow.com/a/1211242.

    • 要求:EWMH(窗口管理器)支持_NET_CLIENT_LIST or _WIN_CLIENT_LIST(我不知道第二个是什么;我找不到任何文档)。

问题:

  1. 还有其他方法吗?是否有任何不依赖于 ICCCM 或 EWMH 等外部机制的方法?

  2. 哪种方法最有弹性?

    1. EWMH。我发现一些报告(上面链接)表明某些应用程序没有列在_NET_CLIENT_LIST。为什么是这样?
    2. 国际商会。这种方法似乎更灵活,但不会通过假设缺乏层次结构的直接子代来匹配无窗口应用程序WM_STATE是顶层应用程序窗口吗?更糟糕的是,它不会在下面严重破裂吗?虚拟根窗口 https://en.wikipedia.org/wiki/Root_window#Virtual_root_window?例如,虚拟根窗口成为唯一的直接子窗口,递归将在第一个应用程序窗口上停止WM_STATE;仅匹配一个窗口。针对这种可能性,xlsclients不包括对虚拟根窗口的任何检查...那么为什么它可以与 GNOME(使用虚拟根窗口)一起使用?

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

X11:列出顶级窗口 的相关文章

随机推荐

  • 如何检查Paramiko是否成功将文件上传到SFTP服务器?

    我使用 Paramiko 将文件放入 SFTP 服务器 import paramiko transport paramiko Transport host port transport connect username username p
  • 禁用 HTML 中的 GIF 动画

    在 HTML 中 有没有办法在 标签中包含动画 GIF 但自动告诉 GIF 不要动画 我意识到用户可以通过按 ESC 或单击 停止 来停止动画 但我希望 GIF 根本不动画 我只想在一个特定页面上执行此操作 并且制作 1500 GIF 的单
  • Xcode 4.3.3 iPhone 5.1 模拟器经常挂起

    我最近一直在四处寻找是否有人遇到类似的问题 但找不到太多信息 大多数时候在模拟器中启动应用程序效果很好 但是模拟器每天都会挂起一两次 我必须强制退出它 XCode 说 在模拟器上运行 xyz 当您尝试在 XCode 中 停止 时 什么也不会
  • ng-bootstrap crash:如何应用动画?

    我正在使用折叠 https ng bootstrap github io components collapse https ng bootstrap github io components collapse 然而 它并没有动画 即使不在
  • Laravel sql server 更改架构的表名称

    我正在开发一个项目 我试图在 SQL Server 数据库上设置一些具有架构的表 因此我手动将表名称更改为迁移文件上的 schema name table name 并且它起作用了 所以这里是例子 Schema create elector
  • 如何在 Django Rest Framework 中过滤具有权限的用户相关记录

    我需要知道如何限制对经过身份验证的用户的访问 以便可以为以管理员身份登录的用户完整列出用户记录 而对于以用户身份登录的用户 只能列出 更新和创建他们的记录 目前我正在使用serializers ModelSerializer viewset
  • Knockout.js 嵌套可排序绑定

    我正在使用 knockout js 可排序插件 然而 我遇到了一个至今无法解决的问题 我有两个可排序的绑定 一个用于存储桶 另一个用于存储桶项目 我能够在存储桶之间重新排序存储桶项目 但是 我无法重新排序存储桶 你知道为什么会这样吗 我也使
  • Postgres 中动态基数的累积添加

    我在 Postgres 中有以下场景 我正在使用9 4 1 我有一个这种格式的表 create table test id serial val numeric not null created timestamp not null def
  • 合并从不同表投影到一个实体的两个 iqueryable

    我努力了这个答案 https stackoverflow com questions 4003813 how to merge two iqueryable lists This one https stackoverflow com qu
  • Golang 比较和更新来自两个不同映射字符串接口的键

    将两个 yaml 文件解组到两个不同的映射后 我想比较两个映射的键 外部键和内部键 因为它是嵌套映射 以及第一个映射 configMap 中是否存在任何键 外部或内部键 和第二张地图 userconfigMap 中不存在 我想将该密钥附加到
  • BoxLayout:无法设置子组件大小

    我有一个JFrame SuperTest and JPanel SuperLogin 登录面板具有用户名和密码输入字段以及登录按钮 我希望它看起来像这样 但如下图所示 输入字段的高度和宽度太大 超级测试 java import javax
  • Tridion 2009 TBB:如何确定页面是否已发布到特定发布目标?

    在使用 TOM NET API 的 TBB 中 我想获取已发布页面的列表 基本上我正在构建站点地图 我正在尝试确定 Tridion ContentManager CommunicationManagement Page 是否已发布 似乎没有
  • 通过 __VA_OPT__ 的递归宏

    编写递归宏是否合法 VA OPT GCC 和 Clang 似乎没有递归替换 但我不确定它是否是故意的 如 VA OPT 支持是最近才出现的 C 规范 19 3 1 3 VA OPT 否则 替换由扩展的结果组成 内容作为当前类函数宏的替换列表
  • 更高 API 上的 NetworkOnMainThreadException

    仅当我在更高的 API 上进行调试时 脚本才会强制关闭 16 但是当涉及到 API 时 它工作正常 10 这可能是我的项目设置问题吗 这是对服务器的一个简单请求 用于获取片段中的类别列表 画廊 java public class galle
  • 随机猜谜游戏 - bug

    当我输入字符串而不是整数时 此代码出现问题 如何检查用户是否输入了字符而不是整数 我想向用户发出一条消息 说你应该使用数字 而不是字符 另外 如果您在这段代码中发现任何我可以改进的地方 请帮助我 我是C语言新手 include
  • 在 Delphi 中使用/不使用 JCL 托管 CLR - 示例

    有人可以在这里发布一个如何在 Delphi 中托管 CLR 的示例吗 我读过类似的question https stackoverflow com questions 258875 hosting the net runtime in a
  • Dictionary 的神秘行为

    我正在开发一个基于 Asp net MVC 3 0 的大型系统 并在 Mono 2 10 8 Windows 7 上工作 一切都很好 直到几天前的一刻 在我的 API 中 我有几个使用字典的实用程序类 例如 像这样的 public stat
  • 缓冲阅读器和扫描仪

    我想知道这是怎么回事 它给了我一个构造函数错误 java io InputSream BufferedReader br new BufferedReader System in String filename br readLine Bu
  • 调整 UICollectionView 高度

    我试图通过在加载视图控制器时将其设置为 0 来调整 UICollectionView 高度的大小 然后在按下按钮时通过动画增加其大小 我尝试了一些不同的东西 但它的大小根本没有改变 以下是我尝试将其高度更改为 0 的所有不同方法 CGRec
  • X11:列出顶级窗口

    到目前为止我发现了两种方法 对于每个根窗口 默认屏幕 特定屏幕 所有屏幕等 列出每个直接子窗口 递归地搜索每个直接子窗口以查找窗口WM STATE财产 该窗口成为直接子窗口的顶级应用程序窗口 并且所有递归都可以停止 如果直接子级的层次结构中