Einzelnen Beitrag anzeigen

Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 

Re: Handle bei mehremals gleichen Klassennamen

  Alt 14. Jun 2008, 06:42
Zitat von ferby:
Ich weiß, wie die Fenster Klasse heißt, aber es gibt mehrer Fenster, mit der selben Klasse.
Ich kenne die ersten 5 Buchstaben des Fenster Titels, aber alle Zeichen dahinter sind Zufällig.
Hallo ferby,

In diesem Fall müsstest du eine eigene FindWindow Funktion schreiben, welche folgendes macht:

- Per GetWindow() wird durch alle Fenster iteriert
- Mit GetWindowText / GetClassName den Fenster Titel / Klassennamen ermittelt
- Überprüfung, ob der Fenster Titel / der Klassennamen mit den übergebenen Parametern
partiell ("match beginning") übereinstimmt.

Delphi-Quellcode:
function MyFindWindow(ClassName, WindowTitle: string): Boolean;
var
  NextHandle: HWND;
  WinTitle, WinClass: array[0..255] of Char;
begin
  Result := 0;
  NextHandle := GetWindow(Application.Handle, GW_HWNDFIRST); // erstes Fenster ermitteln
  while NextHandle > 0 do // falls Fenster gefunden
  begin
    // Fenster Titel, Klassennamen ermitteln
    GetWindowText(NextHandle, WinTitle, SizeOf(WinTitle));
    GetClassName(NextHandle, WinClass, SizeOf(WinClass));
    // Überprüfung, ob Anfang der Strings übereinstimmen
    if (Copy(WinTitle, 1, Length(WindowTitle)) = WindowTitle) and
    (Copy(WinClass, 1, Length(ClassName)) = ClassName) then
    begin
      // Fenster gefunden, abbrechen
      Result := NextHandle;
      Break;
    end
    else
      NextHandle := GetWindow(NextHandle, GW_HWNDNEXT); // nächstes Fenster ermitteln
  end;
end;
Beispiel Aufruf: MyFindWindow('Afx','Fenster Titel');
Thomas
  Mit Zitat antworten Zitat