Auf Glueck sollte man sich eher nich verlassen ...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"?
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$)
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

(kannste ja z.B. auch alle in einzelne hWnd-Variablen speichern usw.)