如何检测当前聚焦的应用程序?

10 投票
2 回答
5435 浏览
提问于 2025-04-16 00:30

我想通过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, )

撰写回答