![]() |
CallNtPowerInformation
Ich versuche gerade die Prozessortaktfrequenz mit Hilfe der API Funktion
![]()
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; |
Re: CallNtPowerInformation
Moin Luckie,
wenn ich das richtig sehe fehlt die Angabe der Aufrufkonvention stdcall. |
Re: CallNtPowerInformation
Verdammt! Das passiert mir immer wieder bei solchen Sachen. Aber das Schlimme ist, ich vergesse jedesmal wieder woran es liegt. :wall: Was ich sagen wollte: Das wars, jetzt geht es. ;)
Korrigierter Code:
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; stdcall; 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; |
Re: CallNtPowerInformation
Warum ermittelst du die Taktfrequnz nicht über RDTSC selber?
|
Re: CallNtPowerInformation
Weil ich es so probieren wollte. Ich bin in einem C Forum daüber gestolpert und da ist mir eingefallen, dass es hier immer wieder Diskrepanzen gab auf den verschiedenen Rechnern. Und warum selber machen, wenn es Windows genauso gut, wenn nicht sogar besser, kann? :zwinker:
BTW: Requires Windows XP, Windows 2000 Professional, Windows Me, or Windows 98. Requires Windows Server 2003 or Windows 2000 Server. Also sogar lauffähig unter Windows ME und 98. ;) |
Re: CallNtPowerInformation
Besser? Das will ich überhört haben. Windows ermittelt den Takt nur einmal, am Systemstart, dann steht zum Beispiel immer die Taktfrequenz in dem Systemeigenschaften. Aber mein Notebook geht bis 1,6GHz und nicht nur 600MHz wie Windows dies anzeigt. Zudem takte ich mit RMClock, mein Prozzi lastabhängig und dadurch ändert sich der Takt andauernd.
Deshalb lieber selber machen, das ist besser :zwinker: André |
Re: CallNtPowerInformation
Delphi-Quellcode:
Guck dir mal das markierte Feld in dem Record an, das dürfte die aktuelle Taktfrequenz sein. ;)
PROCESSOR_POWER_INFORMATION = packed record
Number: Cardinal; MaxMhz: Cardinal; CurrentMhz: Cardinal; // <-- !!! MhzLimit: Cardinal; MaxIdleState: Cardinal; CurrentIdleState: Cardinal; end; PPROCESSOR_POWER_INFORMATION = ^PROCESSOR_POWER_INFORMATION; |
Re: CallNtPowerInformation
Kannste mal bitte ein Testprogramm anhängen (mit exe, hab kein Delphi mehr installiert. Ich müsste erst eins in einer VM installieren) dann kann ich es mal testen.
|
Re: CallNtPowerInformation
Liste der Anhänge anzeigen (Anzahl: 1)
Wie der Herr wünschen. ;)
|
Re: CallNtPowerInformation
Bingo Michael, das funktioniert.
Auch wenn ich mit Centrino Hardware Control die Taktrate verändere, der API-Aufruf ermittelt die aktuelle Taktrate jedesmal von neuem. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz