本文整理自网络,侵删。
unit Agent;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type_SYSTEM_PERFORMANCE_INFORMATION = record IdleTime: LARGE_INTEGER; Reserved: array[0..75] of DWORD;end;PSystemPerformanceInformation = ^TSystemPerformanceInformation;TSystemPerformanceInformation = _SYSTEM_PERFORMANCE_INFORMATION;
_SYSTEM_BASIC_INFORMATION = record Reserved1: array[0..23] of Byte; Reserved2: array[0..3] of Pointer; NumberOfProcessors: UCHAR;end;PSystemBasicInformation = ^TSystemBasicInformation;TSystemBasicInformation = _SYSTEM_BASIC_INFORMATION;
_SYSTEM_TIME_INFORMATION = record KeBootTime: LARGE_INTEGER; KeSystemTime: LARGE_INTEGER; ExpTimeZoneBias: LARGE_INTEGER; CurrentTimeZoneId: ULONG;end;PSystemTimeInformation = ^TSystemTimeInformation;TSystemTimeInformation = _SYSTEM_TIME_INFORMATION;
type TForm1 = class(TForm) Button1: TButton; Timer1: TTimer; Label1: TLabel; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;
function NtQuerySystemInformation(SystemInformationClass: UINT;SystemInformation: Pointer;SystemInformationLength: ULONG;ReturnLength: PULONG): Integer; stdcall; external 'ntdll.dll';
var Form1: TForm1; FOldIdleTime: LARGE_INTEGER; FOldSystemTime: LARGE_INTEGER;
implementation
{$R *.dfm}
function GetCPURate: Byte;varPerfInfo: TSystemPerformanceInformation;TimeInfo: TSystemTimeInformation;BaseInfo: TSystemBasicInformation;IdleTime: INT64;SystemTime: INT64;beginResult := 0;if NtQuerySystemInformation(3, @TimeInfo, SizeOf(TimeInfo), nil) <> NO_ERROR then Exit;if NtQuerySystemInformation(2, @PerfInfo, SizeOf(PerfInfo), nil) <> NO_ERROR then Exit;if NtQuerySystemInformation(0, @BaseInfo, SizeOf(BaseInfo), nil) <> NO_ERROR then Exit;if (FOldIdleTime.QuadPart <> 0) and (BaseInfo.NumberOfProcessors <> 0) thenbegin IdleTime := PerfInfo.IdleTime.QuadPart - FOldIdleTime.QuadPart; SystemTime := TimeInfo.KeSystemTime.QuadPart - FOldSystemTime.QuadPart; if SystemTime <> 0 then Result := Trunc(100.0 - (IdleTime / SystemTime) * 100.0 / BaseInfo.NumberOfProcessors);end;FOldIdleTime := PerfInfo.IdleTime;FOldSystemTime := TimeInfo.KeSystemTime;end;
procedure TForm1.Timer1Timer(Sender: TObject);begin self.Label1.Caption := IntToStr(GetCPURate);end;
procedure TForm1.FormCreate(Sender: TObject);begin
end;
end.
相关阅读 >>
Delphi 使用indy解决tidssliohandlersocketopenssl could not load ssl library错误
Delphi防止因系统崩溃而丢失任务栏的图标(重建托盘图标)
更多相关阅读请进入《Delphi》频道 >>