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;