到目前为止我发现了两种方法:
-
对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),列出每个直接子窗口。递归地搜索每个直接子窗口以查找窗口WM_STATE
财产;该窗口成为直接子窗口的顶级应用程序窗口,并且所有递归都可以停止。如果直接子级的层次结构中没有窗口具有WM_STATE
属性,假设直接子级本身就是顶级应用程序窗口。
Use xcb_get_property
, and xcb_query_tree
(尽管名字只列出了直系孩子)。
这是什么xls客户端通过 XCB 使用(或多或少与上面相同的算法)。
要求:需要 ICCCM(窗口管理器)支持WM_STATE
.
-
对于每个根窗口(默认屏幕、特定屏幕、所有屏幕等),获取“_NET_CLIENT_LIST”属性,该属性列出了窗口管理器管理的所有顶级应用程序窗口。
问题:
还有其他方法吗?是否有任何不依赖于 ICCCM 或 EWMH 等外部机制的方法?
-
哪种方法最有弹性?
- EWMH。我发现一些报告(上面链接)表明某些应用程序没有列在
_NET_CLIENT_LIST
。为什么是这样?
- 国际商会。这种方法似乎更灵活,但不会通过假设缺乏层次结构的直接子代来匹配无窗口应用程序
WM_STATE
是顶层应用程序窗口吗?更糟糕的是,它不会在下面严重破裂吗?虚拟根窗口 https://en.wikipedia.org/wiki/Root_window#Virtual_root_window?例如,虚拟根窗口成为唯一的直接子窗口,递归将在第一个应用程序窗口上停止WM_STATE
;仅匹配一个窗口。针对这种可能性,xlsclients
不包括对虚拟根窗口的任何检查...那么为什么它可以与 GNOME(使用虚拟根窗口)一起使用?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)