从Python发现Gnome/Linux/Ubuntu上哪些窗口处于活动状态?

Ror*_*ory 4 python linux metacity gnome window-managers

有没有办法获得目前打开的所有窗口的列表,看看哪个窗口在顶部(即活动?)来自Python?

这是在Ubuntu Linux上使用Gnome.

wnck看起来可能会这样做,但它在文档中非常缺乏.

Mes*_*ion 11

以下是使用现代GObject Introspection库的相同代码,而不是现在弃用的PyGTK方法Josh Lee发布的:

from gi.repository import Gtk, Wnck

Gtk.init([])  # necessary if not using a Gtk.main() loop
screen = Wnck.Screen.get_default()
screen.force_update()  # recommended per Wnck documentation

window_list = screen.get_windows()
active_window = screen.get_active_window()
Run Code Online (Sandbox Code Playgroud)

至于文档,请查看Libwnck参考手册.它不是特定于python,但使用GObject Introspection的重点是在所有语言中使用相同的API,这要归功于gir绑定.

此外,Ubuntu随附两个wnck及其相应的gir绑定开箱即用,但如果您需要安装它们:

sudo apt-get install libwnck-3-* gir1.2-wnck-3.0
Run Code Online (Sandbox Code Playgroud)

这也将安装libwnck-3-dev,这不是必需的,但会安装您可以使用DevHelp阅读的有用文档

  • 我认为这是真正的最新答案.谢谢. (2认同)

Jos*_*Lee 8

import wnck
screen = wnck.screen_get_default()
window_list = screen.get_windows()
active_window = screen.get_active_window()
Run Code Online (Sandbox Code Playgroud)

另请参阅X中的获取活动窗口标题和文档中的WnckScreen.包含wnck的其他问题包含有用的代码示例.

  • 请注意,重复查询时,这将始终返回相同的窗口,即使该窗口不再处于活动状态.要更新状态,必须刷新Gtk事件队列并在调用`get_active_window`之前显式调用`force_update`.看一下这个要点:https://gist.github.com/adewes/6960581 (3认同)