2010-06-28 19 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規範。)

相關問題