【问题标题】:How do I detect the currently focused application?如何检测当前关注的应用程序?
【发布时间】:2011-03-09 00:54:19
【问题描述】:

我希望能够通过 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 等所有这些新奇的窗口管理器配合使用。

【问题讨论】:

  • 请问可以替换死链接吗?

标签: python x11 xlib


【解决方案1】:

哇!我自己想通了:

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, )

【讨论】:

  • 那么,window.query_tree() 实际上是做什么的?我发现我也使用它来获得所需的结果,但它背后的含义/功能对我来说仍然有点神秘。 Python Xlib 文档也没有多大帮助。
【解决方案2】:

一个更好的解决方案,特别是对于长时间运行的应用程序而不是脚本,将使用 libwnck 来跟踪 _NET_ACTIVE_WINDOW 提示。 (有关提示的定义,请参阅 EWMH 规范。)

【讨论】:

    猜你喜欢
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 2016-04-29
    • 1970-01-01
    • 2016-08-30
    • 2014-06-09
    相关资源
    最近更新 更多