Получить заголовок окна с помощью Python? - PullRequest
4 голосов
/ 09 октября 2009

Я пытаюсь написать программу на python, которая каждые X секунд проверяет, изменилось ли «название окна» для «last.fm» (http://www.last.fm/download), если оно изменилось (или это первый раз, когда я запускаю программа) следует использовать строку из заголовка окна, чтобы найти текст песни и отобразить ее пользователю.

В настоящее время я использую KDE4 в качестве среды рабочего стола, и мне просто нужно «указать в правильном направлении», как я могу захватить строку, которая принадлежит заголовку окна для клиента last.fm.

Спасибо!

Ответы [ 5 ]

4 голосов
/ 09 октября 2009

Вы можете использовать утилиту wmctrl через модуль subprocess. Вы можете набрать wmctrl -l в терминале и посмотреть вывод, который вы можете получить от него.

2 голосов
/ 09 октября 2009

Я думаю, что с помощью инфраструктуры автоматизации вы сможете достичь этого как подмножество. например попробуйте dogtail (https://fedorahosted.org/dogtail/),, он может фокусироваться на окнах по имени, нажимать на кнопки по имени, чтобы в коде src вы могли видеть, как получить заголовок.

1 голос
/ 09 октября 2009

Посмотрите на утилиты 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
0 голосов
/ 12 декабря 2009

другой ответ, может быть, чтобы проверить, публикует ли приложение изменение песни на DBus. если это произойдет, вы можете просто прослушать событие и действовать в соответствии с этим.

0 голосов
/ 09 октября 2009

Попробуйте использовать dcop и пилотирование Kwin. Вы, вероятно, можете перечислить все заголовки окон.

Ниже приведен пример использования dcop: http://docs.kde.org/stable/en/kdegraphics/ksnapshot/dcop.html

...