關於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;
    }
}

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