Как в X11 отследить создание окна другим процессом?

Как в X11 отследить создание окна другим процессом?

25.12.2018 03:18:09 Просмотров 33 Источник

Мне нужно перехватить в X11 событие создания нового окна другими процессами средствами XLib и получить дескриптор окна. Могу ли я использовать для этого XNextEvent()?

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/925290/%d0%9a%d0%b0%d0%ba-%d0%b2-x11-%d0%be%d1%82%d1%81%d0%bb%d0%b5%d0%b4%d0%b8%d1%82%d1%8c-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%ba%d0%bd%d0%b0-%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d0%bc-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc#comment1528826_925290
событие CreateNotify , оно?
https://ru.stackoverflow.com/questions/925290/%d0%9a%d0%b0%d0%ba-%d0%b2-x11-%d0%be%d1%82%d1%81%d0%bb%d0%b5%d0%b4%d0%b8%d1%82%d1%8c-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%ba%d0%bd%d0%b0-%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d0%bc-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc#comment1528833_925290
Видимо, да. Однако, главный вопрос в том, получу ли я это событие от другого процесса.
https://ru.stackoverflow.com/questions/925290/%d0%9a%d0%b0%d0%ba-%d0%b2-x11-%d0%be%d1%82%d1%81%d0%bb%d0%b5%d0%b4%d0%b8%d1%82%d1%8c-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%ba%d0%bd%d0%b0-%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d0%bc-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc#comment1528837_925290
судя по отсутствию каких-либо оговорок в документации — должен... но стоит проверить...
https://ru.stackoverflow.com/questions/925290/%d0%9a%d0%b0%d0%ba-%d0%b2-x11-%d0%be%d1%82%d1%81%d0%bb%d0%b5%d0%b4%d0%b8%d1%82%d1%8c-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%ba%d0%bd%d0%b0-%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d0%bc-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc#comment1528863_925290
Смущает вот это: "To receive CreateNotify events, set the SubstructureNotifyMask bit in the event-mask attribute of the window. Creating any children then generates an event.". То есть, я должен применить данную маску к корневому окну?
https://ru.stackoverflow.com/questions/925290/%d0%9a%d0%b0%d0%ba-%d0%b2-x11-%d0%be%d1%82%d1%81%d0%bb%d0%b5%d0%b4%d0%b8%d1%82%d1%8c-%d1%81%d0%be%d0%b7%d0%b4%d0%b0%d0%bd%d0%b8%d0%b5-%d0%be%d0%ba%d0%bd%d0%b0-%d0%b4%d1%80%d1%83%d0%b3%d0%b8%d0%bc-%d0%bf%d1%80%d0%be%d1%86%d0%b5%d1%81%d1%81%d0%be%d0%bc#comment1529341_925290
мда… звучит как-то не совсем правильно, но на самом деле может и сработать… предсказать результат я не возьмусь, так что надо пробовать…

Ответы - Как в X11 отследить создание окна другим процессом? / Как в X11 отследить создание окна другим процессом?

Vasiliy

26.12.2018 09:35:36

Эксперимент показал, что для перехвата событий создания окна любым клиентом достаточно следующего:

Window rootWin = XRootWindow(disp, 0);     
XSelectInput(disp, rootWin, SubstructureNotifyMask); 
...
while (1) {
    int ret = XNextEvent(disp, &event); 
...
Закрыть X