Zum vorherigen AbschnittZum nächsten Abschnitt Prozessorauslastung ermitteln
Um zu erfahren, wie stark der Prozessor des Computers derzeit ausgelastet ist, müssen Sie sich nur einem von Windows angelegten und ständig akualisierten Registry-Wert bedienen, es sind also eigentlich keine API-Deklarationen von Nöten - außer denen zum Auslesen des Registry-Eintrags.
Ihre Bewertung:
 12345
    

Bewertung dieses Tipps:  (bewertet von insgesamt 20 Besuchern)

 Zum vorherigen AbschnittZum nächsten Abschnitt Zugriff auf die Registry
Um auf die Windows Registrierungsdatenbank (kurz: Registry) zugreifen zu können, benötigen Sie mehrere API-Funktionen sowie die dazugehörigen Konstanten usw.. Um Ihnen die Arbeit mit der Registry zu erleichtern, wurde von mir in eigenständiges Modul entworfen, dass Ihnen alle benötigten Funktionen zur Verfügung stellt.
Binden Sie am besten einfach dieses Modul in Ihr Projekt ein, dann können sie den folgenden Teil nämlich überspringen. Eine Einführung in die Arbeit mit dem Registry-Modul (Codename Registry.bas) finden Sie übrigens hier.

Wer jedoch unbedingt eventuell nicht benötigten Code vermeiden möchte, kann auch nur folgenden Code in ein Modul aufnehmen, denn mehr wird für das Ermitteln der CPU-Auslastung nicht benötigt:

'Registry-Schüssel
Public Const HKEY_DYN_DATA = &H80000006

'Rückgabewerte
Public Const REG_BINARY = 3
Public Const ERROR_SUCCESS = 0&

'API-Deklarationen
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long

'Registry-Eintrag auslesen (Binär)
'Beispiel:   Variable = GetSettingByte(HKEY_LOCAL_MACHINE, "Software\SHADOWare", "Eintrag", "Vorgabe")
'(die Vorgabe wird zurückgegeben, wenn der Eintrag nicht existiert)

Public Function GetSettingByte(ByVal hKey As Long, ByVal strPath As String, ByVal strValueName As String, Optional Default As Variant) As Variant
   Dim lValueType As Long
   Dim byBuffer() As Byte
   Dim lDataBufferSize As Long
   Dim lRegResult As Long
   Dim hCurKey As Long
   
   If Not IsEmpty(Default) Then
      If VarType(Default) = vbArray + vbByte Then
         GetSettingByte = Default
      Else
         GetSettingByte = 0
      End If
   Else
      GetSettingByte = 0
   End If
   lRegResult = RegOpenKey(hKey, strPath, hCurKey)
   lRegResult = RegQueryValueEx(hCurKey, strValueName, 0&, lValueType, ByVal 0&, lDataBufferSize)
   If lRegResult = ERROR_SUCCESS Then
      If lValueType = REG_BINARY Then
         ReDim byBuffer(lDataBufferSize - 1) As Byte
         lRegResult = RegQueryValueEx(hCurKey, strValueName, 0&, lValueType, byBuffer(0), lDataBufferSize)
         GetSettingByte = byBuffer
      End If
   Else
      'Irgendetwas ist schiefgegangen
   End If
   lRegResult = RegCloseKey(hCurKey)
End Function

 Zum vorherigen AbschnittZum nächsten Abschnitt Auslesen des Eintrags
Nun ist unser Programm endlich im Stande, auch auf die Registry zuzugreifen. Da Windows wie gesagt selbstständig Informationen über die Auslastung in die Registry schreibt, müssen wir nur noch folgenden Schlüssel auslesen:
HKEY_DYN_DATA\PerfStats\StatData\KERNEL\CPUUsage (Achtung: "KERNEL\CPUUsage" ist der Name des Eintrags, "KERNEL" ist kein Schlüssel!).

Da der Wert in binärer Form vorliegt, muss er noch umgerechnet werden. Folgende Funktion liest den Registry-Eintrag aus, wandelt ihn um und gibt ihn dann in Prozent zurück:

Function GetCPUUsage() As Byte
   GetCPUUsage = Asc(Registry.GetSettingByte(HKEY_DYN_DATA, "PerfStats\StatData", "KERNEL\CPUUsage", 0))
End Function

 Zum vorherigen AbschnittZum nächsten Abschnitt Beispielprojekt
Sie können sich hier ein Beispiel als Projektdatei für Vb5 und Vb6 herunterladen.
 Projekt herunterladen



Quellen: SHADOWare.de
Letzte Änderung: 29.12.00
©2000 by SHADOWare, Thomas Bachem