2010-06-28 22 views
6

Me gustaría poder rastrear qué aplicación está actualmente enfocada en mi pantalla X11 de Python. La intención es vincularlo a una herramienta de seguimiento del tiempo para poder hacer un seguimiento de cuánto tiempo gasto siendo improductivo.¿Cómo puedo detectar la aplicación actualmente enfocada?

ya me encontré con este código en 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(),) 

Sin embargo, no parece funcionar para mí. Aparentemente, no importa qué aplicación esté enfocada, get_wm_class() y get_wm_name() simplemente devuelven None.

Por supuesto, la solución debe funcionar con todos estos nuevos administradores de ventanas con filo como Compiz y tal.

Respuesta

8

Whoo! Lo he descubierto a mí mismo:

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

Entonces, ¿qué hace 'window.query_tree()' en realidad? He descubierto que yo también lo he usado para obtener el resultado deseado, pero el significado/función detrás de esto todavía es un misterio para mí. Los documentos Python Xlib tampoco son de mucha ayuda. – erb

0

Una solución algo más agradable, especialmente para una aplicación de larga duración en lugar de un guión, utilizaría libwnck para seguir la pista _NET_ACTIVE_WINDOW. (Consulte la especificación EWMH para la definición de la sugerencia).

Cuestiones relacionadas