uses PsAPI;


function GetProcessCpuUsage(ProcessID: DWORD): Double;
var
hProcess: THandle;
ProcessMemoryCounters: TProcessMemoryCounters;
CreationTime, ExitTime, KernelTime, UserTime: TFileTime;
TotalTime: Int64;
SystemTime: TSystemTime;
begin
Result := 0.0;
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, ProcessID);
if hProcess <> 0 then
begin
try
GetProcessTimes(hProcess, CreationTime, ExitTime, KernelTime, UserTime);
TotalTime := (Int64(UserTime.dwHighDateTime) shl 32 + UserTime.dwLowDateTime) +
(Int64(KernelTime.dwHighDateTime) shl 32 + KernelTime.dwLowDateTime);
GetSystemTime(SystemTime);
Result := TotalTime / (SystemTime.wHour * 3600 + SystemTime.wMinute * 60 + SystemTime.wSecond);
finally
CloseHandle(hProcess);
end;
end
else
raise Exception.Create('Could not open process.');
end;


procedure TForm1.Button1Click(Sender: TObject);
var PUsage: Double;
ProcessID: DWORD;
begin
PUsage := GetProcessCpuUsage(ProcessID);
end;