在程序中我需要弄清楚当前焦点窗口的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);
}
此程序打印:
如果重点关注gtk应用程序,则会出现name:xterm,class:XTerm
name:xterm,class:XTerm
失败
失败
失败
name:xterm,class:XTerm
name:xterm,class:XTerm
name:okular,class:Okular
name:okular,class:Okular
失败
失败
name:xterm,class:XTerm
name:xterm,class:XTerm
name:xterm,class:XTerm
failed
。我测试了emacs,gimp,chromium和ardor。
为什么?我如何得到WM_CLASS
gtk-windows?
答案 0 :(得分:0)
焦点不一定设置为顶级窗口。特别是,Gtk倾向于将其设置为这样一个窗口的孩子。
你需要走窗口树。