
نوشته شده توسط
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;