Посмотрите, пожалуйста - все ли я верно делаю. У меня задача (на потоки) - вывести информацию о владельцах самого большого количества блоков. Вот код:
| Код | procedure Tfm.btnResClick(Sender: TObject); var proc: TProcessEntry32; hp : THeapEntry32; hpL :THeapList32; sizemax: integer; i,j: integer; snap, curSnap: THandle; // снимки li: TListItem; ok: boolean;
begin proc.dwSize:=SizeOf(proc); // размер потока hp.dwSize:=SizeOf(hp); // размер блока hpL.dwSize:=SizeOf(hpL); // размер кучи sizemax:= hp.dwSize; // за максимальный размер берем первый mm.Lines.Clear;
Snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); // делаю снимок if Process32First(Snap, proc) then repeat i:=0; CurSnap := CreateToolHelp32Snapshot(TH32CS_SNAPHEAPLIST, proc.th32ProcessID); if Heap32ListFirst(CurSnap, hpL) then repeat if Heap32First(hp, hpL.th32ProcessID, hpL.th32HeapID) then repeat if (hp.dwBlockSize > sizemax) then begin sizemax:=hp.dwBlockSize; inc(i); break; end; until not Heap32Next(hp);
until not Heap32ListNext(CurSnap, hpL); if i>0 then begin memo.Lines.Add('ID владельца '+IntToStr(hp.th32ProcessID)); memo.Lines.Add('ID процесса'+IntToStr(proc.th32ProcessID)); memo.Lines.Add('размер блока '+IntToSTr(hp.dwBlockSize)); end; CloseHandle(CurSnap); until not Process32Next(Snap, proc); CloseHandle(Snap); end;
|
Пожалуйста, очень нужно! |