2009-08-30 16 views
6

E 'possibile in Python sapere se è in esecuzione un'applicazione a schermo intero su linux? Ho la sensazione che potrebbe essere possibile utilizzare Xlib ma non ho trovato un modo.Come sapere se è in esecuzione un'applicazione a schermo intero?

EDIT: Con schermo intero voglio dire nulla intero schermo altro che l'applicazione, ad esempio un gioco a schermo intero.

+0

Potrebbe essere necessario decidere esattamente cosa si intende per "applicazione a schermo intero". E 'solo una finestra che copre abbastanza dello schermo che nessun'altra finestra è visibile? Cosa succede se c'è più di un monitor? –

+0

ok, modifica la domanda. –

risposta

3

trovato una soluzione:

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 

Questo stampa il numero di finestre a schermo intero che per me è normalmente uno. Quando si gioca a schermo intero è 2.

4

Se tutti i Window Manager che ti interessa in esecuzione sotto il supporto EWMH, l'estesa serie Suggerimenti Window Manager ci sono eleganti modi per eseguire questa (parlando a Xlib via ctypes, per esempio). La proprietà della finestra radice (vedere here) indica quale finestra è attiva (se presente); la proprietà _NET_WM_STATE della finestra attiva è quindi un elenco di atomi che ne descrivono lo stato che includerà _NET_WM_STATE_FULLSCREEN se tale finestra è a schermo intero. (Se hai più monitor, ovviamente una finestra potrebbe essere a schermo intero su uno di essi senza essere attiva, credo che potrebbero esistere altri casi in cui una finestra potrebbe essere a schermo intero senza essere attiva - Non penso che ci sia un modo per coprirli tutto senza essenzialmente controllare _NET_WM_STATE per ogni finestra, però).

+0

Si utilizza la macro Xlib RootWindow (visualizzazione e schermo come argomenti) o DefaultRootWindow (solo visualizzazione come argomento); Ho dimenticato cosa espandono in termini di chiamate sottostanti, ma i file .h di Xlib ti diranno. Oppure, con python xlib (più pratico di ctype per questa attività, IMHO), è l'attributo '.root' del metodo' screen' dell'oggetto 'Display'. –

+0

Non vedo come ottengo la proprietà _NET_ACTIVE_WINDOW di esso. –

+0

In Python xlib, usate il metodo 'get_property' o' list_properties' per gli oggetti finestra - consultate http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.html e i collegamenti da esso. Vedi per es. 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 $ (il MBAtomEnum) per i valori numerici di quelle macro/costanti (basta contare ;-). –

Problemi correlati