Окно верхнего уровня в X Window System - PullRequest
3 голосов
/ 12 марта 2010

Я хочу напечатать на экране информацию об окнах верхнего уровня под Linux.

Я использую функции xlib. Я успешно возвращаюсь из корневого окна, чтобы распечатать всю информацию обо всех элементах на дисплее.

Но мне нужно только окно верхнего уровня. Я не нашел хорошего способа фильтрации.

Из википедии:

Окна верхнего уровня - это точно прямые подокна корневого окна.

С этим определением у меня есть несколько окон, таких как: gnome-session, seahorse-daemon, notify-osd или значки, в моем списке, и я не хочу их.

Я также нахожу функцию: XmuClientWindow, но я не понимаю ее цели.

Ответы [ 2 ]

4 голосов
/ 24 мая 2011

Посмотрим, правильно ли я понимаю, что вы хотите. Окна верхнего уровня являются прямыми потомками корневого окна или с некоторыми оконными менеджерами виртуального корневого окна - см. Корневое окно (Википедия) , которое вы, похоже, уже нашли. В этой статье также рассказывается, как найти список виртуальных корневых окон. Вы можете использовать XQueryTree в корневом или виртуальном корне, чтобы найти список дочерних окон.

Как только вы получите этот список, вам, вероятно, придется применить множество мерзких эвристик, чтобы найти интересующие вас окна. XmuClientWindow сообщит вам, какое окно приложения (если оно есть) связано с вашим окном верхнего уровня. Приложения создают окна и диспетчеры окон reparent , чтобы они были дочерними элементами окна верхнего уровня, которое они создают для хранения оконных декораций и других вещей (кнопка максимизации, кнопка закрытия, маркеры изменения размера). Чтение расширенных подсказок оконного менеджера из окна клиента / приложения может подсказать вам, например, имеете ли вы дело со специальным окном (док, панель, что угодно). Вы также можете захотеть взглянуть на подсказки менеджера окон в окне приложения (XGetWMHints (3), XGetWMNormalHints (3), XGetWMSizeHints (3)), чтобы решить, интересует ли вас это или нет - Менеджеры окон создают множество временных окон, которые вы вероятно, не волнует.

См. бесшовный код в гостевых дополнениях VirtualBox для примера просмотра окон верхнего уровня.

0 голосов
/ 21 октября 2015
wmctrl -l 

Эта простая команда выведет список всех окон верхнего уровня под root.

...