10

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などのこれらすべての新しいウィンドウマネージャーと連携する必要があります。

4

2 に答える 2

13

おっと!私はそれを自分で理解しました:

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, )
于 2010-06-28T10:35:24.160 に答える
0

特にスクリプトではなく長時間実行されるアプリの場合、やや優れたソリューションは、libwnckを使用して_NET_ACTIVE_WINDOWヒントを追跡します。(ヒントの定義については、EWMH仕様を参照してください。)

于 2010-07-23T01:54:28.370 に答える