LINUX.ORG.RU

X-Window, идентификатор окна


0

0

Как узнать идентификатор окна по его имени?

xwininfo не предлагать, нужен код на С который все делает сам (без кликаний мышью и прочего)

я так понял что с помощью XQueryTree надо перебрать все дочерние окна, если имя дочернего окна совпадает с нужным то взять его идентификатор

вот только как это реализовать я не понимаю

>вот только как это реализовать я не понимаю

подозреваю, что надо скачать сорцы и прочитать.

alex4
()
Ответ на: комментарий от alex4

Сорцы я нашел на free pascal как это в С перевести хз

и как с XQueryTree работать тоже не ясно, например получить перый дочерний каталог

msblast
() автор топика
#include <stdio.h>
#include <X11/Xlib.h>

int main() {
    Display *dpy = XOpenDisplay(NULL);
    Window root;
    Window parent;
    Window *children;
    unsigned num_children;

    if (!dpy)
        return 1;

    if (XQueryTree(dpy, RootWindow(dpy, DefaultScreen(dpy)), &root, &parent, &children, &num_children)) {
        int i;
        for (i = 0; i < num_children; ++i) {
            char *name = NULL;
            if (XFetchName(dpy, children[i], &name) && name) {
                printf("%#x: %s\n", children[i], name);
                XFree(name);
            }
        }
        XFree(children);
    }

    return 0;
}
arsi ★★★★★
()
Ответ на: комментарий от arsi

if (XFetchName(dpy, children[i], &name) && name) &name - я так понял это заголовок дочернего каталога а name - искомый?

могу я сделать к примеру так: if (XFetchName(dpy, children[i], &name) && "program_1")

msblast
() автор топика
Ответ на: комментарий от msblast

> &name - я так понял это заголовок дочернего каталога а name - искомый?

> каталога

э‧‧‧‧‧‧ кого? о_О

и нет, это не заголовок, а имя. что-то вроде имени класса окна.

и не искомого, а просто окна из списка дочерних окон корневого окна.

> могу я сделать к примеру так: if (XFetchName(dpy, children[i], &name) && "program_1")

«а эти грибы есть можно? — можно, только отравишься…». вот здесь примерно то же.

if (XFetchName(dpy, children[i], &name) && name && strcmp(name, "program_1") == 0) { … }

arsi ★★★★★
()
Ответ на: комментарий от arsi

спасибо вам огромное за помощь

работает как надо

msblast
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.