4

我正在编写一个程序,它需要在运行 X11 的 Linux 主机上检测正在运行的窗口管理器的名称(例如 Compiz)。

我目前依赖于扩展窗口管理器提示规范,它允许我查询_NET_SUPPORTING_WM_CHECKXGetWindowProperty获取 a 的 ID,Window然后我可以查询(通过另一个调用XGetWindowProperty_NET_WM_NAME属性:

if ((disp = XOpenDisplay(NULL)))
{
    if (!(XGetWindowProperty(disp, DefaultRootWindow(disp), XInternAtom(disp, "_NET_SUPPORTING_WM_CHECK", True),
        0, 1024, False, XA_WINDOW, &actual_type, &actual_format, &nitems, &bytes, (unsigned char **) &wm_check_window)))
    {
        if (!(XGetWindowProperty(disp, *wm_check_window, XInternAtom(disp, "_NET_WM_NAME", True),
            0, 1024, False, XInternAtom(disp, "UTF8_STRING", True), &actual_type,
            &actual_format, &nitems, &bytes, (unsigned char **) &wm_name)))
        {
            strncpy(str, (char *) wm_name, MAX_STRLEN);
            XFree(wm_name);
        }
    }
}

这对于符合 EWMH 的窗口管理器非常有效,但对于不符合 EWMH 的窗口管理器根本不起作用。我尝试过获取这些WM_NAME属性,但它只包含活动窗口的标题(或与标题相关的内容)。

有没有什么方法可以在没有EWMH的情况下通过 X11 获取窗口管理器的实际名称?

4

0 回答 0