Liste der geöffneten Fenster

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Liste der geöffneten Fenster

Beitragvon jo_hb » Montag 12. November 2007, 19:50

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
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Liste der geöffneten Fenster

Beitragvon gerold » Montag 12. November 2007, 20:45

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Beitragvon jo_hb » Montag 12. November 2007, 21:14

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
jo_hb
User
Beiträge: 72
Registriert: Donnerstag 26. April 2007, 09:21

Beitragvon jo_hb » Montag 12. November 2007, 22:10

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

Wer ist online?

Mitglieder in diesem Forum: Kniffte, pixewakb