Author: Jonas Bilinkevicius How to port the output of EnumWindows to a TStringList Answer: Untested: 1 procedure TForm1.Button1Click(Sender: TObject); 2 begin 3 StrList.clear; 4 EnumWindows(@EnumWindowsProc, integer(StrList)); 5 end; 6 7 function EnumWindowsProc(Wnd: HWND; lst: TStringList): BOOL; stdcall; 8 var 9 capttxt: array[0..128] of Char; 10 begin 11 Result := True; 12 if IsWindowVisible(Wnd) { skip invisible windows } and 13 ((GetWindowLong(Wnd, GWL_HWNDPARENT) = 0) { only top-level windows} 14 or (HWND(GetWindowLong(Wnd, GWL_HWNDPARENT)) = GetDesktopWindow)) 15 and ((GetWindowLong(Wnd, GWL_EXSTYLE) and 16 WS_EX_TOOLWINDOW) = 0) {skip Tool windows } then 17 begin 18 SendMessage(Wnd, WM_GETTEXT, Sizeof(capttxt), integer(@capttxt)); 19 List.Items.Add(capttxt); 20 end; 21 end;