Как я обнаруживаю в настоящее время фокусируемое приложение?

Я хотел бы смочь отследить, какое приложение в настоящее время фокусируется на моем дисплее X11 из Python. Намерение состоит в том, чтобы связать его в timetracking инструмент так, чтобы я мог отслеживать то, сколько времени я провожу быть непроизводительным.

Я уже нашел этот код по http://thpinfo.com/2007/09/x11-idle-time-and-focused-window-in.html:

import Xlib.display
display = Xlib.display.Display()
focus = display.get_input_focus()
print "WM Class: %s" % ( focus.focus.get_wm_class(), )
print "WM Name: %s" % ( focus.focus.get_wm_name(), )

Однако это, кажется, не работает на меня. По-видимому, неважно, какое приложение фокусируется, оба, get_wm_class () и get_wm_name () просто не возвращают Ни один.

Конечно, решение должно работать со всеми этими новыми fangled менеджерами окон как Compiz и такой.

8
задан Soren 28 June 2010 в 10:24
поделиться

2 ответа

Ого! Я сам это понял:

import Xlib.display
display = Xlib.display.Display()
window = display.get_input_focus().focus
wmname = window.get_wm_name()
wmclass = window.get_wm_class()
if wmclass is None and wmname is None:
    window = window.query_tree().parent
    wmname = window.get_wm_name()
print "WM Name: %s" % ( wmname, )
11
ответ дан 5 December 2019 в 15:19
поделиться

Несколько более приятным решением, особенно для долго работающего приложения, а не скрипта, будет использование libwnck для отслеживания подсказки _NET_ACTIVE_WINDOW. (Определение подсказки см. в спецификации EWMH)

.
0
ответ дан 5 December 2019 в 15:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: