我有一个带有windowmanager的x11显示器(遗憾的是不是特定的,可能是twm,dtwm,mwm,metacity ......),myApp和其他带有windows的应用程序。如果其他应用程序关闭,我想关闭显示器,myApp是唯一一个在显示器上显示窗口的应用程序。我知道myApp的窗口,但是我如何区分窗口管理器和其他应用程序的窗口。
我目前正在使用xwininfo -tree -root -children进行轮询并将其与我期望的进行比较,但这仅适用于“定义良好”的环境。
似乎上面提到的许多窗口管理器都不支持EWMH。
答案 0 :(得分:1)
不会有完全非黑客的方式。
ICCCM建议通过查找WM_STATE属性来识别顶层窗口(特别是与WM帧相对)。所以你可以区分应用程序窗口。但是,当WM将窗口重新编入框架时,在框架窗口内找到应用程序窗口会变得棘手。您必须实现一个小程序来执行类似xwininfo -tree的操作,但只检查设置了WM_STATE的窗口。
一个相对不错的解决方案是使用libwnck,或者基于它的其中一个工具(wmctrl,devil's pie)。然而,这需要一个EWMH窗口管理器(其中包括任何远程现代或理智的东西,但听起来你正在处理一些非常古老的curmudgeonly东西)。 这些工具的优点是它们使用EWMH来识别应用程序窗口甚至是那些应用程序窗口的语义类型(对话框等)。
此外,libwnck不需要轮询,它只能监视顶层窗口列表中的更改。