我想写一个python程序检查每一个X秒,如果'窗口标题为'last.fm'(http://www.last.fm/download)改变,如果它(或它是我第一次运行该程序)它应该使用使用从窗口标题捕获的字符串搜索歌曲的歌词并将其显示给用户。使用python获取窗口标题?
我目前正在使用KDE4作为我的桌面环境,我只需要'指向正确的方向'我如何捕获属于last.fm客户端窗口标题的字符串。
谢谢!
我想写一个python程序检查每一个X秒,如果'窗口标题为'last.fm'(http://www.last.fm/download)改变,如果它(或它是我第一次运行该程序)它应该使用使用从窗口标题捕获的字符串搜索歌曲的歌词并将其显示给用户。使用python获取窗口标题?
我目前正在使用KDE4作为我的桌面环境,我只需要'指向正确的方向'我如何捕获属于last.fm客户端窗口标题的字符串。
谢谢!
你可以通过subprocess
模块使用wmctrl
工具。您可以在终端中输入wmctrl -l
并查看您可以从中获得的输出。
我认为通过使用自动化框架,您可能能够实现这一点作为子集。 例如尝试dogtail(https://fedorahosted.org/dogtail/),它可以按名称专注于窗口,按名称按钮,所以在src代码中,您可能会看到如何获得标题。
尝试使用dcop和试用kwin。你可以列出所有的窗口标题。
例子请参阅以下关于如何使用DCOP: http://docs.kde.org/stable/en/kdegraphics/ksnapshot/dcop.html
看一看X11事业,特别是xlsclients
和xprop
。
作为一个例子,这是我用来获取我的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
另一个答案可能是检查应用程序是否将歌曲更改发布到DBus。如果确实如此,那么你可以听取事件并采取行动。