Ich versuche gerade die Prozessortaktfrequenz mit Hilfe der
API Funktion
CallNtPowerInformation zu ermitteln. Leider schlägt das irgenwie fehl. Erst kommt "Nicht genügend Arbeitsspeicher" und dann kommt eine
AV. Wo habe ich jetzt schon wieder den Denkfehler?
Delphi-Quellcode:
type
PROCESSOR_POWER_INFORMATION = packed record
Number: Cardinal;
MaxMhz: Cardinal;
CurrentMhz: Cardinal;
MhzLimit: Cardinal;
MaxIdleState: Cardinal;
CurrentIdleState: Cardinal;
end;
PPROCESSOR_POWER_INFORMATION = ^PROCESSOR_POWER_INFORMATION;
function CallNtPowerInformation(InformationLevel: DWORD; InPutBuffer: Pointer; InputBufferSize: ULONG; OutPutBuffer:
Pointer; OutPutBufferSize: ULONG): DWORD; external 'PowrProf.dll';
procedure TForm1.Button1Click(Sender: TObject);
var
ppi: PROCESSOR_POWER_INFORMATION;
err: DWORD;
begin
ZeroMemory(@ppi, sizeof(PROCESSOR_POWER_INFORMATION));
err := CallNTPowerInformation(11, nil, 0, @ppi, sizeof(PROCESSOR_POWER_INFORMATION));
if err = 0 then
ShowMessage(IntToStr(ppi.CurrentMhz))
else
ShowMessage(SysErrorMessage(err));
end;