我想寫一個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。如果確實如此,那麼你可以聽取事件並採取行動。