2

我有一个带有窗口管理器的 x11 显示器(遗憾的是不是一个特定的显示器,可能是 twm、dtwm、mwm、metacity ...)、myApp 和其他带有窗口的应用程序。如果其他应用程序已关闭并且 myApp 是唯一一个在显示屏上带有窗口的应用程序,我想关闭显示屏。我确实知道 myApp 的窗口,但是如何区分 windowmanger 的窗口和其他应用程序的窗口。

我目前正在使用 xwininfo -tree -root -children 进行轮询并将其与我的预期进行比较,但这仅适用于“定义明确”的环境。

似乎上面提到的许多窗口管理器都不支持 EWMH。

4

1 回答 1

1

不会有一种完全非 hacky 的方式。

ICCCM 建议通过查找 WM_STATE 属性来识别顶级窗口(特别是与 WM 框架相反)。所以你可以用它来区分应用程序窗口。但是,当 WM 将窗口重新设置为框架时,要在框架窗口内找到应用程序窗口会变得很棘手。您必须实现一个小程序来执行 xwininfo -tree 之类的操作,但只检查设置了 WM_STATE 的窗口。

一个相对不错的解决方案是使用 libwnck,或基于它的工具之一(wmctrl,devil's pie)。然而,这需要一个 EWMH 窗口管理器(它包括任何远程现代或理智的东西,但听起来你正在处理一些非常古老的粗俗的东西)。这些工具的优点是它们使用 EWMH 来识别应用程序窗口,甚至是那些应用程序窗口(对话框等)的语义类型。

此外,libwnck 消除了轮询的需要,它可以只观察顶层窗口列表中的变化。

于 2010-04-30T19:34:55.327 回答