HKCU auslesbar, HKLM nicht
17.07.2021 18:55:43
W.Stecher
ich möchte verschiedene Werte aus der Registry auslesen und stehe vor dem Problem, dass das unter allen Einträgen bei HKEY_CURRENT_USER einwandfrei funktioniert, bei HKEY_LOCAL_MACHINE jedoch nicht.
Zur Demonstration habe ich einmal einen Code zusammengestellt ( habe ich auch als Datei hochgeladen: https://www.herber.de/bbs/user/147174.xlsm ).
Wird die Funktion Versionsnummer_auslesen ausgeführt, wird die Versionsnummer von Mozialla Firefox sowohl aus HKEY_CURRENT_USER als auch aus HKEY_LOCAL_MACHINE ausgelesen. Die stehen in meiner Registrierung an beiden Stellen. Wahrend die Versionsnummer unter HKEY_CURRENT_USER ermittelt werden kann, kann sie unter HKEY_LOCAL_MACHINE nicht ermittelt werden. Wie gesagt, dieser Code ist nur zur Demonstration. In Wirklichkeit brauche ich Werte, die nur unter HKEY_LOCAL_MACHINE stehen.
Weiß jemand, warum HKEY_CURRENT_USER funktioniert, HKEY_LOCAL_MACHINE aber nicht ?
Danke für Eure Ideen.
Option Explicit
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" ( _
ByVal hKey As Long, _
ByVal lpSubKey As String, _
phkResult As Long) As Long
Private 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
Private Declare Function RegCloseKey Lib "advapi32.dll" ( _
ByVal hKey As Long) As Long
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Public Function Versionsnummer_auslesen()
Dim sValue1 As String
Dim sValue2 As String
sValue1 = RegKeyLesen(HKEY_CURRENT_USER, "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion")
sValue2 = RegKeyLesen(HKEY_LOCAL_MACHINE, "SOFTWARE\Mozilla\Mozilla Firefox", "CurrentVersion")
MsgBox "HKCU: " & sValue1 & vbCrLf _
& "HKLM: " & sValue2, vbInformation, "Firefox Version"
End Sub
Private Function RegKeyLesen(lngKey As Long, sPath As String, sValue As String) As String
Dim vRet As Variant
RegOpenKey lngKey, sPath, vRet
RegKeyLesen = RegKeyWertLesen(vRet, sValue)
RegCloseKey vRet
End Function
Private Function RegKeyWertLesen(ByVal lngKey As Long, ByVal sValueName As String) As String
Dim sBuffer As String
Dim lTypeValue As Long
Dim lBufferSizeData As Long
If RegQueryValueEx(lngKey, sValueName, 0, lTypeValue, ByVal 0, lBufferSizeData) = 0 Then
sBuffer = String(lBufferSizeData, Chr$(0))
If RegQueryValueEx(lngKey, sValueName, 0, 0, ByVal sBuffer, lBufferSizeData) = 0 Then
RegKeyWertLesen = Left$(sBuffer, InStr(1, sBuffer, Chr$(0)) - 1)
End If
End If
End Function