如何检测当前关注的应用程序?

时间:2010-06-28 08:16:04

标签: python x11 xlib

我希望能够通过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 :(得分: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规范。)