在Python中获取窗口标题 - 难的方法?

时间:2013-03-07 17:47:40

标签: python linux x11

我想在Python中每隔X秒检查一个窗口标题 - 到目前为止没有大问题,我发现了很多像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

这不是我在其他地方看到的,而不是我需要的东西 - 所以我怎样才能得到那个标题呢?这是一些错误配置还是我对所有事情都非常错误?

PS:我正在使用Fedora 18 btw

2 个答案:

答案 0 :(得分:0)

使用xprop -name somewindowname ...时,您将获得所有信息。但是,如果您想要找出somewindowname,那么这种形式可能没用。

另一种方法,假设窗口id是十六进制数(例如,0x04a27cf6),则使用wmctrl -l和grep作为数字。例如,在我的机器(tini)上,窗口为0x04a27cf6,标题为“xprop手册页”,

wmctrl  -l | grep 0x04a27cf6

产生

0x04a27cf6  4 tini xprop man page

注意,“wmctrl是与EWMH / NetWM兼容的X Window Manager进行交互的UNIX / Linux命令行工具”,如tomas.styblo.namewikipedia中所述。几个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-wmctrlw-xprop各有39行,并且diff -y w-*|less的并排比较无例外地显示两个文件中的相同名称。

答案 1 :(得分:0)

您可以使用-id获得相同的属性集,并且只需单击鼠标,只要您在两种情况下都选择相同的窗口。要获取窗口ID,请使用xwininfo并单击窗口。

您获得的一小部分属性可能仅仅是因为列表很大并且包含许多空行。尝试向上滚动终端。