掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
タスクマネージャのCPU使用率を取得するには? (ID:31491)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
google先生発言ありがとうございます。 そこから色んな所を探して、下のコードでCPU使用率を出す事が出来ました。 解決しました! ちなみに開発環境は、 WindowsXP-Pro-SP2+Delphi7-Proです。 //============================================================================// // CPU使用率を算出 // //============================================================================// //---宣言とかいっぱい--- 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; function NtQuerySystemInformation( SystemInformationClass: UINT; SystemInformation: Pointer; SystemInformationLength: ULONG; ReturnLength: PULONG): Integer; stdcall; external 'ntdll.dll'; var FOldIdleTime: LARGE_INTEGER; FOldSystemTime: LARGE_INTEGER; //===CPU使用率算出関数=== function GetCPURate: Byte; var PerfInfo: TSystemPerformanceInformation; TimeInfo: TSystemTimeInformation; BaseInfo: TSystemBasicInformation; IdleTime: INT64; SystemTime: INT64; begin Result := 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) then begin 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; //---↑ここまで↑---
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.