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
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
Sie können sich hier ein Beispiel als Projektdatei für Vb5 und Vb6 herunterladen.
Quellen: SHADOWare.de Letzte Änderung: 29.12.00 |
©2000 by SHADOWare, Thomas Bachem |