如何检测当前聚焦的应用程序?
我想通过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之类的。
2 个回答
0
一个更好的解决方案,特别是对于长时间运行的应用程序,而不是简单的脚本,可以使用libwnck来跟踪_NET_ACTIVE_WINDOW提示。(关于这个提示的定义,可以查看EWMH规范。)
14
太好了!我自己搞定了:
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, )