Home » Tipps & Tricks » System » Prozesse » Auflisten aller Fenster

Auflisten aller Fenster

Es ist zwar möglich mit Hilfe einer Schleife über GetWindow eine solche Liste zu erstellen, die Methode ist jedoch fehleranfälliger, da man zum Teil in einer Endlosschleife landen kann oder ein Handle erhält, dessen Fenster bereits zerstört wurde.Die folgende Methode verwendet die Systenfunktion EnumWindows. Dabei wird dann die Callback Prozedur mit den entsprechenden Parametern aufgerufen.

function EnumWinProc(Wnd: THandle; LParam: LongInt): Boolean; stdcall;
var
  WinCaption : string;
  Len: integer;
begin
  Result := True;
  Len := GetWindowTextLength(Wnd);
  SetLength(WinCaption, Len);
  GetWindowText(Wnd, PChar(WinCaption), Len+1);
  if Trim(WinCaption) <> '' then
    Form1.Listbox1.Items.Add(Format('%.6x : %s', [Wnd, WinCaption]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWindows(@EnumWinProc, 0);
end;

In diesem Fall werden die Informationen in Listbox1 ausgegeben, die sich auf Form1 befinden muss.Zuerst wird eine sechsstellige Hex-Zahl ausgegeben, die das Handle des Fensters darstellt, dann wird der Titel ausgegeben.Die Ausgabe kann über die Parameter der Funktion Format angepasst werden.