2009-08-30 11 views
6

¿Es posible en python decir si se está ejecutando una aplicación de pantalla completa en Linux? Tengo la sensación de que podría ser posible usar Xlib pero no he encontrado la manera.¿Cómo saber si se está ejecutando una aplicación de pantalla completa?

EDIT: En la pantalla completa me refiero a la pantalla ENTERA nada más que la aplicación, como un juego de pantalla completa.

+0

Puede que tenga que decidir exactamente lo que quiere decir con "aplicación de pantalla completa". ¿Es solo una ventana que cubre suficiente de la pantalla que no hay otras ventanas visibles? ¿Qué pasa si hay más de un monitor? –

+0

ok, editó la pregunta. –

Respuesta

3

encontrado una solución:

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 

Esto muestra el número de ventanas de pantalla completa que para mí es normalmente uno. Al jugar a un juego de pantalla completa es 2.

4

Si todos los administradores de ventanas que está interesado en ejecutar con el soporte EWMH, el estándar Extended Window Manager Hints, hay formas elegantes de hacerlo (hablando con Xlib a través de ctypes, por ejemplo). La propiedad de la ventana raíz (consulte here) le indica qué ventana está activa (si existe); La propiedad _NET_WM_STATE de la ventana activa es una lista de átomos que describen su estado, que incluirá _NET_WM_STATE_FULLSCREEN si esa ventana es a pantalla completa. (Si tienes varios monitores, por supuesto, una ventana podría ser de pantalla completa en uno de ellos sin estar activo; creo que pueden existir otros casos en los que una ventana puede ser de pantalla completa sin estar activo; no creo que haya ninguna forma de cubrirlos). todo sin verificar esencialmente _NET_WM_STATE para cada ventana, sin embargo).

+0

Utiliza la macro Xlib RootWindow (pantalla y pantalla como argumentos) o DefaultRootWindow (solo se muestra como argumento); Olvidé en qué se expandieron en términos de llamadas subyacentes, pero los archivos .h de Xlib te lo dirán. O bien, con python xlib (más manejable que ctype para esta tarea, en mi humilde opinión), es el atributo '.root' del método' screen' del objeto 'Display'. –

+0

No veo cómo obtengo la propiedad _NET_ACTIVE_WINDOW de la misma. –

+0

En Python xlib, use el método 'get_property' o' list_properties' de objetos de ventana; consulte http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.html y enlaces desde allí. Ver p. 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) para los valores numéricos de esas macros/constantes (solo cuenta hacia arriba ;-). –

Cuestiones relacionadas