نقل قول نوشته شده توسط seyed_farid مشاهده تاپیک
سلام و تشکر از ارسال پاسختون

با استفاده از دستورات شما ، خروجی عددیست که با هر بار مقدارش اضاف میشه و CPU Usage رو نشون نمیده.
فک کنم خروجی دستورات شما پروسس تایم را میدهد نه پروسس یوزیج.
اینم یه تست بزن:

uses
PSAPI, TlHelp32;


Function EnumThreadProc( wnd: HWND; Var appHwnd: HWND ): LongBool;
stdcall;
Var
buf: array [0..128] of Char;
Begin
Result := LongBool(1);
if GetClassname( wnd, buf, sizeof(buf)) > 0 then
If StrComp( buf, 'TApplication' ) = 0 Then Begin
appHwnd := Wnd;
Result := False;
End;
End;


Function FindApplicationWindow( forThreadID: DWORD ): HWND;
Begin
Result := 0;
EnumThreadWindows( forThreadID, @EnumThreadProc, lparam(@result));
End;


Function ProcessIDFromAppName( appname: String ): DWORD;
{ Take only the application filename, not full path! }
Var
snapshot: THandle;
processEntry : TProcessEntry32;
Begin
Result := 0;
appName := UpperCase( appname );
snapshot := CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS,
0 );
If snapshot <> 0 Then
try
processEntry.dwSize := Sizeof( processEntry );
If Process32First( snapshot, processEntry ) Then
Repeat
If Pos(appname,
UpperCase(ExtractFilename(
StrPas(processEntry.szExeFile)))) > 0
Then Begin
Result:= processEntry.th32ProcessID;
Break;
End; { If }
Until not Process32Next( snapshot, processEntry );
finally
CloseHandle( snapshot );
End; { try }
End;


function GetCpuUsage(PID:cardinal):single;
var
hProcess: Cardinal;
mCreationTime,mExitTime,mKernelTime, mUserTime: _FILETIME;
TotalTime1,TotalTime2: Int64;
SysInfo : _SYSTEM_INFO;
CpuCount: Word;
begin
GetSystemInfo(SysInfo);
CpuCount := SysInfo.dwNumberOfProcessors;
hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,False,PID);
if hProcess <> 0 then
begin
try
GetProcessTimes(hProcess,mCreationTime,mExitTime,m KernelTime,mUserTime);
TotalTime1:=(Int64(mUserTime.dwHighDateTime) shl 32 + mUserTime.dwLowDateTime) +
(Int64(mKernelTime.dwHighDateTime) shl 32 + mKernelTime.dwLowDateTime);


Sleep(750);


GetProcessTimes(hProcess,mCreationTime,mExitTime,m KernelTime,mUserTime);
TotalTime2:=(Int64(mUserTime.dwHighDateTime) shl 32 + mUserTime.dwLowDateTime) +
(Int64(mKernelTime.dwHighDateTime) shl 32 + mKernelTime.dwLowDateTime);


Result:=((TotalTime2-TotalTime1)/750)/100/CpuCount;
finally
CloseHandle(hProcess);
end;
end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var
CPU: Single;
PName: string;
begin
PName:= 'bds';
CPU := GetCpuUsage(ProcessIDFromAppName(PName));
Label1.Caption := FormatFloat('0%', CPU);
end;