constructor TProcessList.Create;
begin
inherited Create;
Refresh;
end;
destructor TProcessList.Destroy;
begin
SetLength(FItems, 0);
inherited Destroy;
end;
function TProcessList.GetItem(Index: Integer): TProcessEntry32;
begin
if (Index < 0) or (Index > High(FItems)) then
raise EListError.CreateFmt(SListIndexError, [Index]);
Result := FItems[Index];
end;
function TProcessList.GetCount: Integer;
begin
Result := Length(FItems);
end;
procedure TProcessList.GetProcessList(var Items: TProcessItems);
var
Item: TProcessEntry32;
Ok: Boolean;
ProcessListHandle: THandle;
Count: Integer;
begin
SetLength(FItems, 0);
ProcessListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
Item.dwSize := SizeOf(Item);
Count := 0;
Ok := Process32First(ProcessListHandle, Item);
while Integer(Ok) <> 0 do
begin
SetLength(FItems, Count + 1);
FItems[Count] := Item;
Inc(Count);
Ok := Process32Next(ProcessListHandle, Item);
end;
end;
procedure TProcessList.Refresh;
begin
GetProcessList(FItems);
end;
function TProcessList.Terminate(Index: Integer): Boolean;
var
h: THandle;
a: DWORD;
Item: TProcessEntry32;
begin
if (Index < 0) or (Index > High(FItems)) then
raise EListError.CreateFmt(SListIndexError, [Index]);
Item := FItems[Index];
h := OpenProcess(PROCESS_ALL_ACCESS, True, Item.th32ProcessID);
GetExitCodeProcess(h, a);
Result := Integer(TerminateProcess(h, a)) <> 0;
Refresh;
end;
constructor TThreadList.Create;
begin
inherited Create;
Refresh;
end;
destructor TThreadList.Destroy;
begin
SetLength(FItems, 0);
inherited Destroy;
end;
function TThreadList.GetItem(Index: Integer): TThreadEntry32;
begin
if (Index < 0) or (Index > High(FItems)) then
raise EListError.CreateFmt(SListIndexError, [Index]);
Result := FItems[Index];
end;
function TThreadList.GetCount: Integer;
begin
Result := Length(FItems);
end;
procedure TThreadList.GetThreadList(var Items: TThreadItems);
var
Item: TThreadEntry32;
Ok: Boolean;
ThreadListHandle: THandle;
Count: Integer;
begin
SetLength(FItems, 0);
ThreadListHandle := CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD, 0);
Item.dwSize := SizeOf(Item);
Count := 0;
Ok := Thread32First(ThreadListHandle, Item);
while Integer(Ok) <> 0 do
begin
SetLength(FItems, Count + 1);
FItems[Count] := Item;
Inc(Count);
Ok := Thread32Next(ThreadListHandle, Item);
end;
end;
procedure TThreadList.Refresh;
begin
GetThreadList(FItems);
end;
function TThreadList.Terminate(Index: Integer): Boolean;
begin
Result := False;
end;