Detect list of loaded programs

We will find all windows, but if window is invisible or it hasn't a caption or it is a MDI-Child then, we won't show this window.

procedure TForm1.Button1Click(Sender: TObject);
var
  Wnd: hWnd;
  Buff: array [0..127] of Char;
begin
  ListBox1.Clear;
  Wnd:=GetWindow(Handle, gw_HWndFirst);
  while Wnd<>0 do
  begin
    if (Wnd<>Application.Handle) and
      IsWindowVisible(Wnd) and
      (GetWindow(Wnd, gw_Owner)=0) and
      (GetWindowText(Wnd, Buff, sizeof(buff))<>0) then
    begin
      GetWindowText(Wnd, Buff, SizeOf(Buff));
      ListBox1.Items.Add(StrPas(Buff));
    end;
    Wnd:=GetWindow(Wnd, gw_hWndNext);
  end;
  ListBox1.ItemIndex:=0;
end;