Как определить текущее приложение? - PullRequest
8 голосов
/ 28 июня 2010

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

Я уже нашел этот код на 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 () просто возвращают None.

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

Ответы [ 2 ]

10 голосов
/ 28 июня 2010

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

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, )
0 голосов
/ 23 июля 2010

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

...