用Python获取窗口标题 - 繁琐的方式?
我想每隔X秒检查一次窗口的标题,用Python来做,这个问题不算太难,我找到了一些工具,比如xprop。
现在问题来了:当我使用xprop -id [id]而不是指针的时候,我只得到2到3行的信息,像这样:
_KDE_NET_WM_USER_CREATION_TIME(CARDINAL) = 24625202
SM_CLIENT_ID(STRING) = "1028c1d320b210000136266856800000015460035"
WM_CLIENT_LEADER(WINDOW): window id # 0x3a00004
这和我在其他地方看到的完全不一样,也不是我需要的内容。那么我该怎么才能获取到窗口标题呢?这是配置出错了,还是我哪里搞错了?
顺便说一下,我用的是Fedora 18。
2 个回答
当你使用 xprop -name somewindowname ...
这个命令时,可以获取到所有相关信息。不过,如果你想知道的正是 somewindowname
的话,这种方式可能就不太好用了。
另一种方法是,假设窗口的ID是一个十六进制数字(比如,0x04a27cf6),你可以使用 wmctrl -l
命令,然后用 grep 来查找这个数字。例如,在我的电脑(tini)上,有一个窗口ID是 0x04a27cf6,标题是 "xprop man page",
wmctrl -l | grep 0x04a27cf6
会得到这样的结果
0x04a27cf6 4 tini xprop man page
需要注意的是,"wmctrl 是一个用于与 EWMH/NetWM 兼容的 X 窗口管理器交互的 UNIX/Linux 命令行工具",具体可以参考 tomas.styblo.name 和 维基百科。很多 Linux 发行版的包管理器都可以安装它。
补充:在阅读了 n.m. 的回答后,我又用 xprop
进行了更多测试。昨天的测试中,xprop -id 0x4a27cf7
只输出了一行,内容是 _NET_WM_USER_TIME(CARDINAL) = 440569797
。这并不是因为“把你的终端往上滚动很久”。不幸的是,我现在没有窗口 0x4a27cf7 了,而现在所有类似的测试似乎都正常工作,正如 n.m. 的回答所示。例如,在执行完这个命令后
for i in $(wmctrl -l |tee w-wmctrl | cut -c-10); do xprop -id $i | grep ^WM_NAME; done > w-xprop
文件 w-wmctrl
和 w-xprop
各自都有 39 行内容,通过 diff -y w-*|less
进行并排比较,结果显示两个文件中的名称完全一致。
你可以通过 -id
和鼠标点击来获取相同的一组属性,前提是你在两种情况下都选择了同一个窗口。要获取窗口的ID,可以使用 xwininfo
命令,然后点击那个窗口。
你看到的那一小部分属性可能是因为列表很长,还包含很多空行。试着把你的终端向上滚动一下。