Python 如何判断全屏应用程序是否正在运行?

Python 如何判断全屏应用程序是否正在运行?,python,linux,x11,Python,Linux,X11,在python中是否可以判断linux上的全屏应用程序是否正在运行? 我觉得使用Xlib是可能的,但我还没有找到一种方法 编辑:全屏我指的是整个屏幕,除了应用程序之外,没有其他任何东西,比如全屏游戏。如果您感兴趣的所有窗口管理器都是在支持下运行的,扩展窗口管理器提示标准,那么有一些优雅的方法可以实现这一点(例如,通过ctypes与Xlib对话)。根窗口(请参阅)的\u NET\u ACTIVE\u WINDOW属性告诉您哪个窗口处于活动状态(如果有);活动窗口的\u NET\u WM\u STA

在python中是否可以判断linux上的全屏应用程序是否正在运行? 我觉得使用Xlib是可能的,但我还没有找到一种方法


编辑:全屏我指的是整个屏幕,除了应用程序之外,没有其他任何东西,比如全屏游戏。

如果您感兴趣的所有窗口管理器都是在支持下运行的,扩展窗口管理器提示标准,那么有一些优雅的方法可以实现这一点(例如,通过ctypes与Xlib对话)。根窗口(请参阅)的
\u NET\u ACTIVE\u WINDOW
属性告诉您哪个窗口处于活动状态(如果有);活动窗口的
\u NET\u WM\u STATE
属性是描述其状态的原子列表,如果该窗口为全屏,则该列表将包括
\u NET\u WM\u STATE\u全屏。(如果你有多个监视器,当然一个窗口可以在其中一个监视器上全屏显示而不处于活动状态;我相信也可能存在其他情况,其中一个窗口可以全屏显示而不处于活动状态——不过,我不认为有任何方法可以在不检查每个窗口的
\u NET\u WM\u STATE
的情况下覆盖所有监视器).

找到了解决方案:

import Xlib.display

screen = Xlib.display.Display().screen()
root_win = screen.root

num_of_fs = 0
for window in root_win.query_tree()._data['children']:
    window_name = window.get_wm_name()
    width = window.get_geometry()._data["width"]
    height = window.get_geometry()._data["height"]

    if width == screen.width_in_pixels and height == screen.height_in_pixels:
        num_of_fs += 1

print num_of_fs

这会打印出全屏窗口的数量,对我来说通常是一个。当玩全屏游戏时,它是2。

您可能必须准确地确定“全屏应用程序”的含义。这只是一个覆盖了足够大屏幕的窗口,其他窗口都看不见吗?如果有多个监视器怎么办?好的,编辑问题。使用Xlib RootWindow宏(显示和屏幕作为参数)或DefaultRootWindow(仅显示为参数);我忘记了它们在底层调用方面的扩展,但Xlib的.h文件会告诉您。或者,对于python xlib(这个任务比ctype更方便,IMHO),它是
Display
对象的
screen
方法的
.root
属性。我不知道如何获得它的_NET\u ACTIVE\u WINDOW属性。在python xlib中,使用窗口对象的
get\u属性
list\u属性
方法--请参阅和其中的链接。有关这些宏/常量的数值,请参见例如(MBAtomEnum)(只需向上计数;-)。list_properties方法从不返回活动窗口的数量。您使用的是什么窗口管理器?如果不符合EWMH,那么这更是一个问题。。。