uses tlhelp32;
procedure TForm1.Button1Click(Sender: TObject);
var lppe:Tprocessentry32;
hh,tt:Thandle;
tppe:TThreadEntry32;
PId:Dword;
begin
hh:=createtoolhelp32snapshot(TH32CS_SNAPPROCESS,0);
lppe.dwsize:=sizeof(lppe);
tppe.dwsize:=sizeof(tppe);
if process32first(hh,lppe) then
repeat
pid:=lppe.th32ProcessID;
listbox1.items.add(format('<%x>%s',[pid,extractfilename(lppe.szExeFile)]));
tt:=createtoolhelp32snapshot(TH32CS_SNAPTHREAD,0);
if thread32first(tt,tppe) then
repeat
if tppe.th32OwnerProcessID=pid then
listbox1.items.add(format(' theadid:<%x>',[tppe.th32threadid]));
until not thread32next(tt,tppe);
closehandle(tt);
until not process32next(hh,lppe);
CloseHandle(hh);
edit1.text:=inttostr(listbox1.items.count);
end;