Code: Alles auswählen
;- CPU-Auslastung-Ermittlung mit der PDH.DLL für 64-Bit-Windows
;- "Helle" Klaus Helbing, 29.09.2010, PB4.51 (x64)
;- Unicode-Variante (deutsches Windows)
If OpenLibrary(0, "PDH.DLL") ;MS-File in \System32
SI.SYSTEM_INFO
#PDH_CSTATUS_NEW_DATA = $1
GetSystemInfo_(@SI) ;Anzahl der Cores ermitteln
AnzCore.l = SI\dwNumberOfProcessors
Buffer.q = AllocateMemory(8 * AnzCore)
CoreLast.d
hQuery.l
Prototype.l ProtoOpenQuery(Para1.l)
Prototype.l ProtoCloseQuery(Para1.l)
Prototype.l ProtoCollectData(Para1.l)
Prototype.d ProtoAuslastung(Para1.l, Para2.l)
Prototype.l ProtoAddCounter(Para1.l, Para2.q, Para3.q)
OpenQuery.ProtoOpenQuery = GetFunction(0, "PdhVbOpenQuery")
CloseQuery.ProtoCloseQuery = GetFunction(0, "PdhCloseQuery") ;sicherer, Server 2003 kennt PdhVbCloseQuery nicht (Win 7 ja)
CollectData.ProtoCollectData = GetFunction(0, "PdhCollectQueryData")
AddCounter.ProtoAddCounter = GetFunction(0, "PdhVbAddCounter")
Auslastung.ProtoAuslastung = GetFunction(0, "PdhVbGetDoubleCounterValue")
RetVal = OpenQuery(@hQuery)
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhVbOpenQuery fehlgeschlagen!")
End
EndIf
For i = 0 To AnzCore - 1
PokeB(?Proz + 11, 48 + i) ;Core-Nr. ändern
RetVal = AddCounter(hQuery, ?Proz, Buffer + (i << 2))
If RetVal
MessageRequester("Fehler !", "Aufruf von PdhVbAddCounter für Core"+ Str(i) + " fehlgeschlagen!")
EndIf
Next
Repeat
CollectData(hQuery)
Auslastung$ = ""
For i = 0 To AnzCore - 1
Auslastung(PeekL(Buffer + (4 * i)), PeekL(Buffer + (4 * AnzCore) + (i << 2)))
!movsd [v_CoreLast],xmm0 ;Float-/Double-Rückgabewert in XMM0! MOVSD sieht eleganter aus
Auslastung$ + "Auslastung Core" + Str(i) + " = " + StrD(CoreLast, 2) + "%" + Space(20)
If PeekL(Buffer + (4 * AnzCore) + (i << 2)) > #PDH_CSTATUS_NEW_DATA ;s.o.
A = -1 ;war kein gültiger Wert
Break
EndIf
Next
If A <> -1
Debug Auslastung$
EndIf
Delay(500)
ForEver
CloseQuery(hQuery)
CloseLibrary(0)
EndIf
DataSection
Proz: ;ist der alte Proz$
Data.b 92,80,114,111,122,101,115,115,111,114,40,48,41,92,80,114,111,122,101,115,115,111,114,122,101,105,116,32,40,37,41,0
EndDataSection
Gruß
Helle