2010-06-28 4 views
6

현재 어떤 응용 프로그램이 파이썬의 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와 같은 새로운 모든 fangled 창 관리자와 함께 작동해야합니다.

답변

8

우! _NET_ACTIVE_WINDOW 힌트를 추적하는 libwnck 사용하는 것이 특히 장기 실행 응용 프로그램이 아닌 스크립트,

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()는 실제로 무엇을합니까? 나는 그것도 내가 원하는 결과를 얻기 위해 그것을 사용했다는 것을 알았지 만 그 뒤에있는 의미/기능은 여전히 ​​나에게 약간의 수수께끼이다. 파이썬 Xlib 문서는 그다지 도움이되지 않습니다. – erb

0

다소 더 좋은 솔루션 : 나 자신을 알아 냈다. (힌트의 정의에 대해서는 EWMH 스펙을 참조하십시오.)