Получить список видимых окон 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);
}
Что можете подсказать по этому поводу?