Seite 2 von 2

Verfasst: 01.12.2008 12:04
von Dare Devil
KatSeiko hat geschrieben:Äh... Ich hätte dann ein Problem: Ich habe zwei Fenster die gleich heißen. Gibt es einen Weg, die zu unterscheiden oder ist das "auf gut Glück"?
Auf Glueck sollte man sich eher nich verlassen ...
Es gibt noch einen anderen Weg, den Fensterhandle zu ermitteln...

Mit EnumWindows_(Adresse zur Funktion, zusaetzlicher Wert fuer Funktion)

Mit EnumWindows_() ermittelst du alle geoeffneten Fenster (und bei Bedarf sogar noch mehr!)
Es funktioniert aehnlich wie eine Schleife.
Ich zeig es dir am besten anhand eines Beispieles:

Code: Alles auswählen

Global str$
str$ = ""

Procedure EnumWindows(hWnd)
newwin$ = Space(1024)
GetWindowText_(hWnd, newwin$, 1024)
If IsWindowVisible_(hWnd) And newwin$ <> ""
  str$ = str$ + newwin$ + Chr(13) + Chr(10)
EndIf
  
ProcedureReturn #True
EndProcedure

EnumWindows_(@EnumWindows(), 0)
MessageRequester("Alle geoeffneten Fenster", str$)
Dieses Programm gibt einen MessageRequester mit den Namen aller geoeffneter Fenster.

str$ ist der String, wo die Fensternamen reinkommen.
newwin$ ist der String wo der neue Fenstername gespeichert wird. GetWindowText_() ist das Gegenstueck zu FindWindow_() und ermittelt den Titel des Fenster anhand des Handles

IsWindowVisible_() ueberprueft, ob es sich um ein "richtiges" Fenster handelt - andernfalls gibt EnumWindows_() naemlich auch Prozesse und alles moegliche (in diesem Fall nicht erwuenschte) an. Ausserdem sollstes du immer ueberpruefen, ob du kein Leerstring zurueckbekommen hast.
Die Funktion muss immer #True zurueckgeben - ansonsten beendet naemlich EnumWindows_() seine Schleife.

Zum Schluss kommt noch die Schleife:
EnumWindows_(@EnumWindows(), 0)

fuehert unsere Funktion solange aus - bis entweder #False zurueckgegeben wird (oder gar nichts) oder es keine Fensterhandle mehr gibt.

Der erste Parameter der Funktion, die aufgerufen werden soll enthaelt dann das Fensterhandle

Ich hoffe du hast so im allgemeinen verstanden - mit dieser Funktion sollteste dann alle Fenster bekommen :allright:
(kannste ja z.B. auch alle in einzelne hWnd-Variablen speichern usw.)

Verfasst: 02.12.2008 08:51
von KatSeiko
Ja, hervorragend. :allright: