Seite 1 von 1

Liste der geöffneten Fenster

Verfasst: Montag 12. November 2007, 19:50
von jo_hb
Hallo,
habe nach längerer Zeit mal wieder Gelegenheit mich mit meinem Python-Projekt zu beschäftigen und gleich eine Frage, zu der ich keine richtige Antwort finde, ich hoffe ihr könnt mir helfen - sollte eigentlich ganz einfach sein:
Ich möchte eine Liste aller aktuell auf dem XP-desktop geöffneten Fenster, sowie die genaue Position und Grösse dieser Fenster.
Also zB falls ich eine Dos-box geöffnet habe und deren Fenster maximiert ist soll die Liste etwa so ausehen:
[["shell",(0,0),(1024,768)], [...], [...]]

Das genaue Format ist natürlich eher nebensächlich, hauptsache die Daten stimmen... :)
Achja, und wenn ich mich recht erinnere hatte ich vor ein paar Monaten schon irgendeinen Ansatz dazu, allerdings weiss ich nicht mehr genau wie - und das Problem damals war dass die Liste viel zu viele Informationen enthielt, weil irgendwie nicht die wirklich sichtbaren Fenster abgefragt wurden sondern die Prozesse, oder so... Ich brauche aber wirklich nur und ausschliesslich die Fenster.
Riesendank schonmal,
und Gruss,
Jo

Re: Liste der geöffneten Fenster

Verfasst: Montag 12. November 2007, 20:45
von gerold
jo_hb hat geschrieben:Ich brauche aber wirklich nur und ausschliesslich die Fenster.
Hallo Jo!

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import win32gui
from pprint import pprint
windows = {}

def add_window(handle, windows):
    if win32gui.IsWindowVisible(handle):
        windows[handle] = {
            "WindowText": win32gui.GetWindowText(handle),
            #"WindowRect": win32gui.GetWindowRect(handle),
            #"DeviceContext": win32gui.GetDC(handle),
        }

win32gui.EnumWindows(add_window, windows)

pprint(windows)
mfg
Gerold
:-)

Verfasst: Montag 12. November 2007, 21:14
von jo_hb
Hallo Gerold,
Ja, genau! Vielen Dank!
Ich bau das grad noch ein bisschen um so dass es mir ein bestimmtes Fenster raussucht, werde das Ergebnis nachher posten!

Gruss,
Jo

Verfasst: Montag 12. November 2007, 22:10
von jo_hb
So, das macht jetzt schonmal genau was ich will - bin mir nur nicht sicher ob das vielleicht ein bisschen umständlich ist...

Code: Alles auswählen

       
def window_pos():
    windows = []
    Title = []

    def get_windows(handle, windows):
        if win32gui.IsWindowVisible(handle):
            if win32gui.GetWindowText(handle).count("shell"):
                windows.append(win32gui.GetWindowRect(handle))
                Title.append(win32gui.GetWindowText(handle))

    win32gui.EnumWindows(get_windows, windows)
    if len(windows) > 1:
        print "Bitte nur ein Fenster!"
        return []
    elif len (windows) == 0:
        print "Kein Fenster gefunden."
        return []
    else:
        return [windows[0], Title[0]]
    
wp = window_pos()
if wp:
    print "Alles klar, Fenster:", wp[1]
else:
    print "Ende."