Доступ к заголовку другого окна в Xwindow

Я пишу программу на C ++ (Linux, XWindow), которая должна изменять заголовок активного окна. Более конкретно, добавьте к нему определенный текст.

Можно ли получить дескриптор окна активного окна (даже если оно не связано с этой программой), чтобы использовать его в XFetchName и XStoreName? Или, может быть, есть какой-то другой способ изменить заголовок определенного окна?

Спасибо.

обновление 1:

я использовал

     xprop -root | grep ^_NET_ACTIVE_WINDOW | cut -c41-49

и он возвращает правильную ручку. Спасибо за этот совет. Это то, что я использовал раньше

xdpyinfo | grep focus: | cut -c16-24

Похоже, он возвращает число, которое больше фактического дескриптора на 1.

Новый вопрос возникает сейчас. Похоже, что XStoreName изменяет WM_NAME. У меня есть рабочий стол Unity, и кажется, что он читает _NET_WM_NAME. Как я могу изменить это тоже?

обновление 2: нашел ответ

Atom Atom_name = XInternAtom(xdisplay,"_NET_WM_NAME",false);
Atom Atom_utf_type = XInternAtom(xdisplay,"UTF8_STRING",false);

XChangeProperty(xdisplay,window_handle,Atom_name,Atom_utf_type,8,PropModeReplace,(unsigned char*)new_name,strlen(new_name));

кажется, сейчас работает нормально

0

Решение

Нет никаких ограничений на работу с иностранными, не связанными окнами, поэтому XFetchName а также XStoreName будет работать (т.е. они получат доступ WM_NAME свойство, которое может иметь желаемый эффект … или нет).

Как определить ток окно, вы можете начать с примера кода здесь:
Как узнать, какое окно имеет фокус и как его изменить? Обратите внимание на непринятый ответ: _NET_ACTIVE_WINDOW свойство корневого окна (когда wm устанавливает его) является наиболее разумным значением для ток окно вы можете получить.

Обратите внимание, что есть _NET_WM_NAME свойство типа UTF8_STRING, который, вероятно, будет использоваться современным оконным менеджером вместо WM_NAME когда они оба установлены. Не все приложения его устанавливают (на моем текущем рабочем столе я вижу, что Firefox делает, а Xterm нет). Вы должны быть готовы изменить _NET_WM_NAME а также, если вы хотите изменить заголовок.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]