我有一个带有窗口管理器的x11显示器(遗憾的是不是特定的,可以是twm,dtwm,mwm,metacity…)、myApp和其他带有windows的应用程序。如果其他应用程序已关闭,并且只有myApp在显示器上有窗口,则我想关闭显示器。我确实知道myApp的窗口,但我如何区分窗口管理器的窗口和其他应用程序的窗口。
我目前正在使用xwininfo -tree -root -children进行投票,并将其与我预期的结果进行比较,但这只适用于‘定义良好’的环境。
上面提到的许多windowmanager似乎都不支持EWMH。
发布于 2010-05-01 03:34:55
不会有一种完全非黑客的方式。
ICCCM建议通过查找WM_STATE属性来识别顶层窗口(与WM框架相对)。所以你可以用它来区分应用程序窗口。但是,当WM将窗口重定为框架的父窗口时,在框架窗口中找到应用程序窗口会变得很棘手。你必须实现一个小程序来做像xwininfo -tree这样的事情,但只检查设置了WM_STATE的窗口。
一个比较好的解决方案是使用libwnck,或者基于libwnck的工具(wmctrl,魔鬼饼)。然而,这需要一个EWMH窗口管理器(它包括任何稍微现代或正常的东西,但听起来像是您在处理一些非常古老的、古怪的东西)。这些工具的优点是它们使用EWMH来识别应用程序窗口,甚至识别这些应用程序窗口(对话框等)的语义类型。
此外,libwnck消除了轮询的需要,它只需监视顶层窗口列表中的更改。
https://stackoverflow.com/questions/2714253
复制相似问题