でも実はそれだけでは不完全なんだわ。理由は自分で考えてくれ。

とりあえずEnumWindowsの使い方。コールバック関数という奴だ。
(ListBox1とButton1を用意しる!)

function EnumWindowProc(Handle:hwnd; lParam:Integer):Bool; stdcall;
var
  szTitle:array[0..255] of char;
begin
  If GetWindowText(Handle, szTitle,255 ) > 0 then Form1.ListBox1.Items.Add(szTitle);
  Result := True;
end;

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