我怎样才能找到具有特定 _NET_WM_NAME 的所有 windows?

How can i find all windows with a particular _NET_WM_NAME?

我需要为所有具有特定 window 名称的 windows 设置自定义 属性。

我试图首先列出所有具有特定名称的 windows,但我遇到的问题是 xprop 或 xwininfo 只会列出一个 window 实例的详细信息,尽管有多个 windows同名可用。

xprop -name 'xyz'
xwininfo -name 'xyz'

最终我将使用下面的命令来设置自定义 属性

xprop -name 'xyz' -f Onkar 8s -set Onkar Hello

另一件需要注意的事情是我无法访问 wmctrl 或 xdotool

这是一个编程方法(在 C 中):

首先,使用 Atoms 和 XGetWindowProperty() 使用 _NET_CLIENT_LIST 属性 获取 window ID。 然后使用 Atoms 下的 WM_NAME 获取 window 名称,再次使用 XGetWindowProperty()。现在您拥有系统中所有活动 windows 的列表,因此您可以使用 strcmp() 来检查 window.

的所需名称

这里给出了工作代码: https://cboard.cprogramming.com/linux-programming/125534-accessing-windows-x11.html

关于 XGetWindowProperty() https://tronche.com/gui/x/xlib/window-information/XGetWindowProperty.html

关于原子: https://tronche.com/gui/x/xlib/window-information/properties-and-atoms.html