2012-01-19 11 views
1

XGetWindowPropertyがnullを返すのはなぜですか?私は、すべてのXウィンドウの名前を取得するには、以下を使用してい

Atom nameAtom = XInternAtom(dpy,"_NET_WM_NAME",false); 
    Atom type; 
    int format; 
    unsigned long nitems, after; 
    unsigned char *data = 0; 

    if (Success == XGetWindowProperty(dpy, window, nameAtom, 0, 65536, 
            false, XA_ATOM, &type, &format, 
            &nitems, &after, &data)) { 
    if (data) { 
     Atom windowName = *(Atom*)data; 
     const char* name = XGetAtomName(dpy, windowName); 
     log.debug("Name: %s", name); 
     XFree(data); 
    } 
    } 

しかし、私のログに私はすべての単一のウィンドウの(null)を取得しています。私は間違って何をしていますか?必要とした何

+0

は、あなたが実際に何かを得ることを確認しましたか?私のmanページから:_XGetWindowPropertyはprop_returnに1つの余分なバイトを割り当てます(プロパティが長さゼロの場合でも)。 'nitems'は非ゼロですか? –

+0

@JoachimPileborg 'nitems'はすべてのウィンドウに対して0です。 – fredley

答えて

4

はそれに応じてUTF8_STRINGとしてreq_typeを指定することでした:

Atom nameAtom = XInternAtom(dpy,"_NET_WM_NAME",false); 
    Atom utf8Atom = XInternAtom(dpy,"UTF8_STRING",false); 
    Atom type; 
    int format; 
    unsigned long nitems, after; 
    unsigned char *data = 0; 

    if (Success == XGetWindowProperty(dpy, window, nameAtom, 0, 65536, 
            false, utf8Atom, &type, &format, 
            &nitems, &after, &data)) { 
    if (data) { 
     log.debug("Name: %s", data); 
     XFree(data); 
    } 
    } 
関連する問題