S
Sliva
Посмотрите, пожалуйста - все ли я верно делаю. У меня задача - вывести информацию о владельцах самого большого количества блоков.
Вот код:
Тут что-то не так, потому что зацикливается программа
Вот код:
Код:
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;