我希望能够通过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等所有这些新奇的窗口管理器一起使用。
答案 0 :(得分:10)
喔!我自己想通了:
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, )
答案 1 :(得分:0)
一个更好的解决方案,特别是对于长时间运行的应用程序而不是脚本,将使用libwnck来跟踪_NET_ACTIVE_WINDOW提示。 (有关提示的定义,请参阅EWMH规范。)