1

在一个程序中,我需要找出WM_CLASS当前焦点窗口的属性。只要焦点窗口不是 gtk 应用程序,它就可以正常XGetInputFocus()工作。XGetClassHint()

我编写了以下最小示例程序wmclass.c

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

int main(int argc, char** argv) 
{
    Window win;
    Display *d;
    XClassHint *clh;

    int rev;
    int status;

    clh = XAllocClassHint();
    d = XOpenDisplay(0);

    for(;;) {
        XGetInputFocus(d, &win, &rev);
        status = XGetClassHint(d,win,clh);
        if (status) 
            printf("name: %s, class: %s\n", clh->res_name,clh->res_class);
        else 
            printf("failed\n");
        sleep(1);
    }

    XFree(clh);
}

该程序打印:

名称:xterm,类:XTerm
名称:xterm,类:XTerm
失败
失败
失败
名称:xterm,类:XTerm
名称:xterm,类:XTerm
名称:okular,类:Okular
名称:okular,类:Okular
失败
失败
名称:xterm ,类:XTerm
名称:xterm,类:XTerm
名称:xterm,类:XTerm

failed如果 gtk 应用程序专注,就会出现。我测试了 emacs、gimp、chromium 和 ardour。

这是为什么?我如何获得WM_CLASSgtk-windows?

4

1 回答 1

1

焦点不一定设置为顶级窗口。特别是,Gtk 倾向于将其设置为此类窗口的子窗口。

你需要把窗户树往上走。

于 2013-03-17T04:47:38.393 回答