![]() |
CPU Temperatur und CPU Auslastung auslesen
Hi Leute,
ich bin auf der Suche nach Lösungsvorschlägen zu meinem Problem (s.oben). Ich hab zwar schon massig im Forum gefunden, kann aber nichts damit anfangen , da ich noch ein Anfänger auf diesem Gebiet bin. Wäre froh wenn jemand mir das genau erklären oder mir ein gut dokumentiertes Programm oder eine Unit geben könnte. Mfg VirusXP |
Re: CPU Temperatur und CPU Auslastung auslesen
Delphi-Quellcode:
CPUUssage liefert die CPU Auslastung zurück!
unit CPU;
interface function CPUUssage:single; implementation uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; 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 = (); CPUTime:single; function CPUUssage:single; begin result:=CPUTime; end; function Li2Double(x: LARGE_INTEGER): Double; begin Result := x.HighPart * 4.294967296E9 + x.LowPart end; procedure GetCPUUsage; var SysBaseInfo: TSystem_Basic_Information; SysPerfInfo: TSystem_Performance_Information; SysTimeInfo: TSystem_Time_Information; status: Longint; {long} dbSystemTime: Double; dbIdleTime: Double; bLoopAborted : boolean; begin if @NtQuerySystemInformation = nil then NtQuerySystemInformation := GetProcAddress(GetModuleHandle('ntdll.dll'), 'NtQuerySystemInformation'); status := NtQuerySystemInformation(SystemBasicInformation, @SysBaseInfo, SizeOf(SysBaseInfo), nil); if status <> 0 then Exit; bLoopAborted := False; while not bLoopAborted do begin status := NtQuerySystemInformation(SystemTimeInformation, @SysTimeInfo, SizeOf(SysTimeInfo), 0); 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; dbIdleTime := 100.0 - dbIdleTime * 100.0 / SysBaseInfo.bKeNumberProcessors + 0.5; CPUTime:=dbIdleTime; Application.ProcessMessages; bLoopAborted := (GetKeyState(VK_ESCAPE) and 128 = 128) or Application.Terminated; end; liOldIdleTime := SysPerfInfo.liIdleTime; liOldSystemTime := SysTimeInfo.liKeSystemTime; Sleep(1000); end; end; procedure Start; var ThreadID: DWORD; ThreadHandle: THandle; begin ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@GetCPUUsage), nil, 0, ThreadID); if ThreadHandle<>0 then CloseHandle(ThreadHandle); end; initialization Start; end. |
Re: CPU Temperatur und CPU Auslastung auslesen
Das mit der Temperatur kannst du unter XP wohl vergessen!
|
Re: CPU Temperatur und CPU Auslastung auslesen
Mit ein paar dll`s und sys Dateien kannst du die CPU Temp auslesen. Habe ich als Projekt erst gemacht.
|
Re: CPU Temperatur und CPU Auslastung auslesen
Dann schick mal was! Mich würde es auch interessieren! ;)
|
Re: CPU Temperatur und CPU Auslastung auslesen
Schau dir mal diesen Thread an, da solltest du alles finden was du benötigst, sonst frag mich einfach
![]() |
Re: CPU Temperatur und CPU Auslastung auslesen
Bekomme immer die Nachricht:
Could not open DriverLINX driver. |
Re: CPU Temperatur und CPU Auslastung auslesen
hm, ich würde gerne eine Konsolenanwendung machen, die in einer einfachen Zeile die Auslastung ausgibt. Warum? Weil ich die Ausgabe dann in PHP einlesen kann, was ich gerne für eine Statusseite nutzen will. Ich hab schon AdCPUUsage (oder wie das hieß) und diese Unit hier probiert, doch beide liefern mir komische Zahlen (AdCPUUsage bringt entweder 100 oder 0 und diese hier immer 0).
Als ich AdCPUUsage mit einer normalen Anwendung probiert habe und auf Knopfdruck auslesen hab lassen, ging es. Ich brauche das Tool für Windows 2K. Kann mir vielleicht einer helfen? |
Re: CPU Temperatur und CPU Auslastung auslesen
wieso gibts jetzt 2 threads auf einmal die mit cpu usage auslesen zu tun haben ?
-> torry -> mitec system information -> cpu usag |
Re: CPU Temperatur und CPU Auslastung auslesen
Aalso...Ich bin hier der anständige Programmierer^^
Ich sollte für den "asd" so ein Minitool machen. Doch nur hatte ich keine Ahnung wie ich die Auslastung auslese. Ich hab ihm diese Adresse gegeben und ihm gesagt, er könne ja auch suchen. Nur hat er, anstatt zu suchen eben gepostet, weil er keine Lust hatte und möglichst schnell eine Antwort wollte. Ich hab dann eben hier, nachdem ich nichts gefunden hatte, das zu klappen scheint, mal "richtig" mit weiteren Angaben gepostet. Also braucht man den sinnlosen Post von ihm nicht mehr. |
Re: CPU Temperatur und CPU Auslastung auslesen
muss echt nix aufwendiges sein, nur ne Konsolenanwengung, dass die Auslastung ausgibt, nur bei mir gibts immer quatsch aus :(
|
Re: CPU Temperatur und CPU Auslastung auslesen
Schön, dass du uns sagst, dass die Funktion aus der Unit bei dir Quatsch ausgibt, da es aber wohl genug Benutzer gibt, bei denen es nicht so ist, muss der Fehler irgendwo bei dir liegen. Etwas Quellcode wäre da doch recht hilfreich.
|
Re: CPU Temperatur und CPU Auslastung auslesen
naja, was soll ich da an Quelltext geben...
Ich rufe die Funktion CPUUsage auf und die gibt mir ganz genau: 0.00000000000000E+0000 zurück :gruebel: |
Re: CPU Temperatur und CPU Auslastung auslesen
Deutet das nicht auf einen Fehler oder zu großen Wert hin?
Zumindest das E am Ende der Zahl lässt mir so etwas logisch erscheinen... MfG Florian :hi: |
Re: CPU Temperatur und CPU Auslastung auslesen
Ok, nun hab ich herausgefunden, dass das Programm die Leistung auf Knopfdruck richtig rausgibt. (mit ReadLn). Für den Zweck, für den ich das Programm brauche, ist das aber schlecht (das Programm soll ja von selbst gestartet werden, oder weiß jemand ob man in PHP auch "Enter" drücken kann?)
|
Re: CPU Temperatur und CPU Auslastung auslesen
Readln gibt was aus?
Unit eingebunden und das im OnTimer Event geschrieben und geht:
Delphi-Quellcode:
Wie und wo du das nun ausgibst, ist vollkommen unerheblich.
procedure TForm1.Timer1Timer(Sender: TObject);
begin Label1.Caption := FloatToStr(CPUUssage); end; |
Re: CPU Temperatur und CPU Auslastung auslesen
Ah, ich habs, man muss das Programm so ~3 Sekunden warten lassen, bevor man die Auslastung testet, hätt ich auch draufkommen können :wall:
Sorry, dass ich euch so genervt habe^^ Das Forum hier gefällt mir :) ich denke, ich werde noch des öfteren vorbeischauen. cu ]4N |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:37 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