如何用Python获取窗口标题?
我正在尝试写一个Python程序,每隔X秒检查一次“last.fm”的窗口标题是否发生了变化。如果变化了(或者这是我第一次运行这个程序),那么程序就会用捕获到的窗口标题字符串去搜索歌曲的歌词,并把歌词显示给用户。
我现在使用的是KDE4桌面环境,我只需要一些指导,告诉我如何获取last.fm客户端的窗口标题字符串。
谢谢!
5 个回答
1
看看X11工具,特别是 xlsclients
和 xprop
这两个命令。
举个例子,这是我用来获取关于我的Firefox窗口信息的命令:
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
2
我觉得如果你使用一个自动化框架,可能可以实现这个功能。比如,你可以试试 dogtail(https://fedorahosted.org/dogtail/),它可以通过窗口名称来聚焦,或者通过按钮名称来点击。所以在源代码中,你可能能看到如何获取标题的方式。
4
你可以通过 subprocess
模块来使用 wmctrl
这个工具。你只需要在终端里输入 wmctrl -l
,就能看到它给你输出的信息。