Viewing file: uProcesses_new.pas (1.71 KB) -rw-rw-rw- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
unit uProcesses_new;
interface
uses GnuGettext, Classes, SysUtils, Windows, PsAPI, JCLSysInfo;
type
tProcesses = class
public
ProcessList2: TStrings;
function GetProcessPath(PID: Cardinal): string;
function GetProcessName(PID: Cardinal): string;
procedure UpdateList;
constructor Create;
destructor Destroy; override;
end;
var
Processes: tProcesses;
implementation
{ tProcessList }
constructor tProcesses.Create;
begin
ProcessList2 := TStringList.Create;
end;
destructor tProcesses.Destroy;
begin
ProcessList2.Clear;
FreeAndNil(ProcessList2);
inherited;
end;
function tProcesses.GetProcessName(PID: Cardinal): string;
var
name: string;
index: integer;
begin
index := ProcessList2.IndexOfObject(Pointer(PID));
if (index >= 0) then
begin
name := ProcessList2[index];
result := name;
end
else
result := '';
end;
function tProcesses.GetProcessPath(PID: Cardinal): string;
var
hProcess: THandle;
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PID);
if hProcess <> 0 then
begin
try
SetLength(result, MAX_PATH);
FillChar(result[1], Length(result) * SizeOf(Char), 0);
if GetModuleFileNameEx(hProcess, 0, PChar(result), Length(result)) > 0 then
result := Trim(result)
else
result := 'Unable to get info';
finally
CloseHandle(hProcess)
end;
end
else
result := 'Unable to open process';
end;
procedure tProcesses.UpdateList;
begin
ProcessList2.Clear;
RunningProcessesList(ProcessList2, False);
end;
initialization
Processes := tProcesses.Create;
finalization
Processes.Free;
end.
|