用Python获取窗口标题?

4
我正在尝试编写一个Python程序,每隔X秒检查一次“last.fm”(http://www.last.fm/download)的“窗口标题”是否更改。如果更改了(或者这是我第一次运行程序),它应该使用从窗口标题中捕获的字符串来搜索歌曲歌词并向用户显示它们。
我目前在使用KDE4作为我的桌面环境,并且我只需要指出如何捕获属于last.fm客户端窗口标题的字符串的正确方向。
谢谢!
5个回答

4

您可以通过subprocess模块使用wmctrl实用程序。您可以在终端中键入wmctrl -l并查看其输出。


2

我认为通过使用自动化框架,您可以将其作为子集实现。 例如,尝试使用dogtail(https://fedorahosted.org/dogtail/),它可以按名称聚焦于窗口,并按名称单击按钮,因此在源代码中,您可以看到如何获取标题。


1

看一下X11实用程序,特别是xlsclientsxprop

例如,这是我用来获取有关我的Firefox窗口信息的shell命令:

id_=$(xlsclients -al|grep "Command:  firefox-bin" -A1 -B4|head -n1|cut -d ' ' -f 2|tr -d ':')
xprop -id "$_id"

输出:

SM_CLIENT_ID(STRING) = "1181f048b9000125508490000000037360008"
WM_CLASS(STRING) = "firefox-bin", "Firefox-bin"
WM_COMMAND(STRING) = { "firefox-bin" }
WM_CLIENT_LEADER(WINDOW): window id # 0x0
_NET_WM_PID(CARDINAL) = 4265
WM_LOCALE_NAME(STRING) = "no_NO"
WM_CLIENT_MACHINE(STRING) = "gnom.ifi.uio.no"
WM_NORMAL_HINTS(WM_SIZE_HINTS):
                program specified size: 10 by 10
WM_PROTOCOLS(ATOM): protocols  WM_DELETE_WINDOW, WM_TAKE_FOCUS, _NET_WM_PING
WM_ICON_NAME(STRING) = "firefox-bin"
_NET_WM_ICON_NAME(UTF8_STRING) = 0x66, 0x69, 0x72, 0x65, 0x66, 0x6f, 0x78, 0x2d, 0x62, 0x69, 0x6e
WM_NAME(STRING) = "Firefox"
_NET_WM_NAME(UTF8_STRING) = 0x46, 0x69, 0x72, 0x65, 0x66, 0x6f, 0x78

0

另一个答案可能是检查应用程序是否将歌曲更改发布到DBus。如果是这样,您只需侦听事件并对其进行操作即可。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接