Получить список видимых окон X11Lib

Уже около недели пытаюсь решить свою проблему - получить список видимых окон в ОС Linux с использованием библиотеки X11Lib. За это время мне почти удалось решить мою проблему, я написал код, который выводит имена видимых окон. Однако в нем наблюдаются две проблемы: 1) В выводимом списке почему-то отсутствуют некоторые окна 2) Имена окон, в которых есть кириллица, выводятся частично - все кириллические буквы исчезают (хотелось бы, чтобы они хотябы заменялись на латинские созвучные).

#include <stdio.h>
#include <iostream>
#include <vector>
#include <string>
#include <X11/Xlib.h>
#include <X11/Xutil.h>

std::vector <Window> win;

void get_win (Window w);

Window rwin;
Window pwin;
Display *disp;

int main(void) {
    disp = XOpenDisplay(NULL); // Устанавливаем связь с X-сервером
    Window w = DefaultRootWindow(disp); // Получаем "самое главное" окно

    get_win (w);

    for (int i = 0; i<win.size(); ++i) {
        XTextProperty name;
        wchar_t **names;
        int count;
        if (XGetWMName(disp, win [i], &name)) {
            if (XwcTextPropertyToTextList (disp, &name,&names,&count)) {
                for (int i2 = 0; i2<count; ++i2) {
                    std::wcout<<names[i2]<<std::endl;
                }

            }
        }
        //XFree(&name); // TODO - Написать правильное освобождение памяти в соответствии с документацией
    }

    if (disp)
        XCloseDisplay(disp);
}

void get_win (Window w) {
    Window *cwins;
    unsigned int count;
    XQueryTree(disp, w, &rwin, &pwin, &cwins, &count);

    win.push_back(w);

    for (unsigned int i = 0; i<count; ++i) {
        get_win (cwins [i]);
    }

    //XFree (&rwin);
    //XFree (&pwin);
    //XFree (&cwins);
    //XFree (&count);
}

Что можете подсказать по этому поводу?


Ответы (0 шт):