2010-06-28 62 views
6

我希望能够跟踪哪些应用程序目前专注于Python中的X11显示。目的是将其绑定到一个时间跟踪工具中,以便我可以跟踪我花费多少时间来降低生产力。如何检测当前重点应用程序?

我已经发现这个代码在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等所有这些新的混合窗口管理器一起工作。

回答

8

Wh!我想通了自己:

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

那么,window.query_tree()实际上做了什么?我发现我也用它来获得所需的结果,但它背后的意义/功能对我来说仍然有点神秘。 Python Xlib文档也没有太大的帮助。 – erb 2015-07-15 09:03:13

0

一个稍微更好的解决方案,尤其是对于长时间运行的应用程序,而不是一个脚本,将使用libwnck跟踪_NET_ACTIVE_WINDOW提示。 (有关提示的定义,请参阅EWMH规范。)

相关问题