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

问题描述:

是否有可能在Python中判断Linux上的全屏应用程序是否正在运行? 我有一种感觉,它可能使用Xlib,但我还没有找到一种方法。如何判断全屏应用程序是否正在运行?

编辑:全屏我的意思是整个屏幕没有别的,但应用程序,如全屏游戏。

+0

你可能必须确定你的意思是“全屏应用程序”。这只是一个覆盖足够的屏幕的窗口,其他窗口不可见?如果有多个显示器会怎么样? – 2009-08-30 23:47:48

+0

好的,编辑了这个问题。 – 2009-08-30 23:53:44

实测值的溶液:

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. 2.

如果您有兴趣在支持EWMH(扩展窗口管理器提示标准)下运行的所有窗口管理器,则可以使用这些方法来执行此操作(例如,通过ctypes与Xlib对话)。根窗口的属性(请参阅here)告诉您哪个窗口处于活动状态(如果有);那么活动窗口的_NET_WM_STATE属性就是描述其状态的原子列表,如果该窗口是全屏的话将包括_NET_WM_STATE_FULLSCREEN。 (如果你有多个监视器,当然一个窗口可以全屏显示而不是主动;我相信其他情况下可能存在一个窗口可能是全屏而不是主动的 - 我不认为有任何方法可以覆盖它们尽管每个窗口本质上都没有检查_NET_WM_STATE)。

+0

您使用Xlib RootWindow宏(显示和屏幕作为参数)或DefaultRootWindow(只显示为参数);我忘记了他们在底层调用方面的扩展,但是Xlib的.h文件会告诉你。或者,使用python xlib(比这个任务更容易使用ctype,恕我直言),它是'Display'对象'screen'方法的'.root'属性。 – 2009-08-31 01:13:07

+0

我看不到我如何获得它的_NET_ACTIVE_WINDOW属性。 – 2009-08-31 02:42:58

+0

在Python xlib中,使用窗口对象的'get_property'或'list_properties'方法 - 参见http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.html及其链接。见例如http://www.google.com/codesearch/p?hl=en&sa=N&cd=2&ct=rc#0kgoha2gKhE/matchbox-window-manager-1.0/src/structs.h&q=%22_NET_ACTIVE_WINDOW%22%20file:%5C。这些宏/常量的数值的h $(MBAtomEnum)(只需计数;-)。 – 2009-08-31 02:54:26