关于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

你可能感兴趣的:(X11,X11,_NET_WM_NAME,WM_NAME,XGetWMName)