Windows with Delphi Windows API (94) Windows Filesystem (41) Windows Forms (69) Windows Graphics (38)
Exchange Links About this site Links to us 
New related comments Number of comments in the last 48 hoursPlay WAV files 1 new comments
|
Reading CPU and memory usage
2 comments. Current rating: (1 votes). Leave comments and/ or rate it.
Question: How can I read the CPU and memory usage on a computer?
Answer: Use the function GetCPUUsage() from below.
 | |  | | const
SystemBasicInformation = 0;
SystemPerformanceInformation = 2;
SystemTimeInformation = 3;
type
TPDWord = ^ DWORD;
TSystem_Basic_Information = packed record
dwUnknown1: DWORD;
uKeMaximumIncrement: ULONG;
uPageSize: ULONG;
uMmNumberOfPhysicalPages: ULONG;
uMmLowestPhysicalPage: ULONG;
uMmHighestPhysicalPage: ULONG;
uAllocationGranularity: ULONG;
pLowestUserAddress: Pointer;
pMmHighestUserAddress: Pointer;
uKeActiveProcessors: ULONG;
bKeNumberProcessors: byte;
bUnknown2: byte;
wUnknown3: word;
end;
type
TSystem_Performance_Information = packed record
liIdleTime: LARGE_INTEGER; {LARGE_INTEGER}
dwSpare: array [0..75] of DWORD;
end;
type
TSystem_Time_Information = packed record
liKeBootTime: LARGE_INTEGER;
liKeSystemTime: LARGE_INTEGER;
liExpTimeZoneBias: LARGE_INTEGER;
uCurrentTimeZoneId: ULONG;
dwReserved: DWORD;
end;
var
NtQuerySystemInformation: function(infoClass: DWORD; buffer: Pointer; bufSize:
DWORD; returnSize: TPDWord) : DWORD;
stdcall= nil;
liOldIdleTime: LARGE_INTEGER = ();
liOldSystemTime: LARGE_INTEGER = ();
Usage: Double;
procedure GetCPUUsage;
var
SysBaseInfo: TSystem_Basic_Information;
SysPerfInfo: TSystem_Performance_Information;
SysTimeInfo: TSystem_Time_Information;
status: Longint; {long}
dbSystemTime: Double;
dbIdleTime: Double;
begin
if @NtQuerySystemInformation=nil then
NtQuerySystemInformation := GetProcAddress(GetModuleHandle(
'ntdll.dll'), 'NtQuerySystemInformation');
status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo,
SizeOf(SysBaseInfo), nil);
if status<>0 then
Exit;
status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf
(SysTimeInfo), nil);
if status<>0 then
Exit;
status := NtQuerySystemInformation(SystemPerformanceInformation, @SysPerfInfo,
SizeOf(SysPerfInfo), nil);
if status<>0 then
Exit;
if (liOldIdleTime.QuadPart<>0) then
begin
dbIdleTime := Li2Double(SysPerfInfo.liIdleTime) - Li2Double(liOldIdleTime);
dbSystemTime := Li2Double(SysTimeInfo.liKeSystemTime) - Li2Double(liOldSystemTime);
dbIdleTime := dbIdleTime / dbSystemTime;
NumberOfProcessors dbIdleTime := 100.0 - dbIdleTime * 100.
0 / SysBaseInfo.bKeNumberProcessors +
0.5;
Usage := dbIdleTime;
if Usage>100 then
Usage := 100
end;
liOldIdleTime := SysPerfInfo.liIdleTime;
liOldSystemTime := SysTimeInfo.liKeSystemTime
end;
| |  | |  |
Comments:
|
|
|
|
what uses are needet for your script?
I got an Error, my Delphi does not know 'Li2Double'
|
|
|
|
|
please explain this program
|
|