关于X11无法获取窗口标题 WM_NAME _NET_WM_NAME

参考资料:

https://www.x.org/releases/current/doc/libX11/libX11/libX11.html

在X11时代窗口的标题属性通过WM_NAME属性存储,到了XCB时间窗口属性通过_NET_WM_NAME存储

X11中提供了 XGetTextProperty,XGetWMName,XFetchName等函数获取窗口的标题

若在X11中获取XCB创建的窗口标题,可使用以下代码

bool get_window_name2(Display* dpy , Window window , char* buf)
{
    
    //尝试使用_NET_WM_NAME方式获取窗口的名称
    XTextProperty tp;
    Status s1 = XGetTextProperty(dpy,window,&tp,XInternAtom(dpy, "_NET_WM_NAME", False));
    if (tp.nitems > 0)
    {
        int count = 0, i, ret;
        char **list = NULL;
        ret = XmbTextPropertyToTextList(dpy, &tp, &list, &count);
        if((ret == Success || ret > 0) && list != NULL){
            for(i=0; i<count; i++)
                sprintf(buf,"%s", list[i]);
            XFreeStringList(list);
        } else {
            sprintf(buf,"%s", tp.value);
        }
        return true;
    }
    else
    {
        return false;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章