2009-08-30 4 views
6

Ist es möglich in Python zu sagen, ob eine Vollbild-Anwendung auf Linux läuft? Ich habe das Gefühl, dass es mit Xlib möglich sein könnte, aber ich habe keinen Weg gefunden.Wie kann ich feststellen, ob eine Vollbildanwendung ausgeführt wird?

EDIT: Mit Vollbild Ich meine den ganzen Bildschirm nichts anderes als die Anwendung, wie ein Vollbild-Spiel.

+0

Sie müssen möglicherweise genau entscheiden, was Sie mit "Vollbild-Anwendung" meinen. Ist das nur ein Fenster, das genug Bildschirm abdeckt, dass keine anderen Fenster sichtbar sind? Was ist, wenn es mehr als einen Monitor gibt? –

+0

ok, bearbeitet die Frage. –

Antwort

3

eine Lösung gefunden:

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 

Dies druckt die Anzahl der Vollbild-Fenster heraus für mich, die normalerweise ist. Wenn Sie ein Vollbild-Spiel spielen, müssen Sie 2

4

Wenn alle Window Manager, die Sie unter Unterstützung EWMH, den erweiterten Window Manager Hints-Standard ausführen möchten, gibt es elegante Möglichkeiten, dies zu tun (sprechen mit Xlib über Ctypes, zum Beispiel). Die Eigenschaft des Stammfensters (siehe here) sagt Ihnen, welches Fenster aktiv ist (falls vorhanden); Die _NET_WM_STATE Eigenschaft des aktiven Fensters ist dann eine Liste von Atomen, die ihren Zustand beschreiben, der _NET_WM_STATE_FULLSCREEN enthält, wenn dieses Fenster Vollbild ist. (Wenn Sie mehrere Monitore haben, könnte natürlich ein Fenster auf einem von ihnen Vollbild sein, ohne aktiv zu sein; ich glaube, dass andere Fälle existieren können, in denen ein Fenster Vollbild sein kann, ohne aktiv zu sein. Ich denke nicht, dass es eine Möglichkeit gibt, sie abzudecken alle ohne im Wesentlichen _NET_WM_STATE für jedes Fenster zu überprüfen, obwohl).

+0

Sie verwenden den Xlib RootWindow-Makro (Anzeige und Bildschirm als Argumente) oder DefaultRootWindow (nur als Argument angezeigt); Ich vergesse, was sie in Bezug auf zugrunde liegende Aufrufe zu erweitern, aber Xlib's .h-Dateien werden Ihnen sagen. Oder, mit python xlib (handlicher als ctype für diese Aufgabe, IMHO), ist es das '.root' Attribut der' screen' Methode des 'Display' Objektes. –

+0

Ich sehe nicht, wie ich die _NET_ACTIVE_WINDOW-Eigenschaft davon erhalte. –

+0

In Python xlib, verwenden Sie 'get_property' oder' list_properties' Methode der Fensterobjekte - siehe http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.html und Links davon. Siehe z.B. http://www.google.com/codesearch/p?hl=de&sa=N&cd=2&ct=rc#0kgoha2gKhE/matchbox-window-manager-1.0/src/structs.h&q=%22_NET_ACTIVE_WINDOW%22%20file:%5C. h $ (das MBAtomEnum) für die numerischen Werte dieser Makros/Konstanten (einfach hochzählen ;-). –