Hallo Frank,
danke für die schnelle Antwort.
Also, ich benutze aus dem Codebespiel nur die Lesen-Funktion, geschrieben sind die Werte bereits anderweitig. Die Werte sind auch vorhanden, das habe ich überprüft. Konkret lautet eine meiner Abfragen:
PfadLogdatei = fWertLesen(HKEY_LOCAL_MACHINE, "Software\MBUS", "PfadLogdatei") Also, Variablen verwende ich da nicht. Aber der Schlüssel "HKLM\Software" existiert ja auch unter Windows 7. Oder etwa nicht? Jetzt wo Du was von Variablen sagst, kommen mir langsam Zweifel. Der Ordner "c:\programme" existiert in Windows 7 ja auch nicht wirklich, obwohl er im Explorer angezeigt wird. Gibt es in der Registry jetzt auch solche Fake-Namen?
Das Modul "Registryzugriff", in dem die benötigten Funktionen liegen, sieht übrigens so aus:
Option Compare Database
Rem Konstanten und API-Aufrufe für den Registry-Zugriff
Declare Function RegOpenKey Lib "advapi32.dll" Alias _
"RegOpenKeyA" (ByVal hKey As Long, ByVal _
lpSubKey As String, phkResult As Long) As Long
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
Declare Function RegSetValueEx Lib "advapi32.dll" _
Alias "RegSetValueExA" (ByVal hKey As Long, _
ByVal lpValueName As String, ByVal Reserved As Long, _
ByVal dwType As Long, lpData As Any, ByVal cbData As Long) _
As Long
Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Declare Function RegCreateKey Lib "advapi32.dll" _
Alias "RegCreateKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String, phkResult As Long) As Long
Declare Function RegDeleteValue Lib "advapi32.dll" _
Alias "RegDeleteValueA" (ByVal hKey As Long, _
ByVal lpValueName As String) As Long
Global Const HKEY_LOCAL_MACHINE = &H80000002
Global Const REG_SZ = 1
Global Const REG_BINARY = 3
' ========================================================
' ========================================================
' Wert aus Registry lesen
' ========================================================
' ========================================================
'
' hKey: Zweig der Registry, z.B. HKEY_LOCAL_MACHINE
' sPath: Pfad unterhalb des Zweigs (Schlüssel)
' sValue: Wert innerhalb des Schlüssels
Function fWertLesen(hKey As Long, sPath As String, _
sValue As String)
Dim vRet As Variant
RegOpenKey hKey, sPath, vRet
fWertLesen = fRegAbfrageWert(vRet, sValue)
RegCloseKey vRet
End Function
' =============================================================================
' =====
' =============================================================================
' =====
' Wird von "fWertLesen" aufgerufen und gibt den Wert eines Schlüsselnamens
' zurück.
' Hierbei wird autom. ermittelt, ob es sich um einen String oder Binärwert
' handelt.
' =============================================================================
' =====
' =============================================================================
' =====
Function fRegAbfrageWert(ByVal hKey As Long, _
ByVal sValueName As String) As String
Dim sBuffer As String
Dim lRes As Long
Dim lTypeValue As Long
Dim lBufferSizeData As Long
Dim iData As Integer
lRes = RegQueryValueEx(hKey, sValueName, 0, _
lTypeValue, ByVal 0, lBufferSizeData)
If lRes = 0 Then
If lTypeValue = REG_SZ Then
sBuffer = String(lBufferSizeData, Chr$(0))
lRes = RegQueryValueEx(hKey, sValueName, 0, _
0, ByVal sBuffer, lBufferSizeData)
If lRes = 0 Then
fRegAbfrageWert = Left$(sBuffer, _
InStr(1, sBuffer, Chr$(0)) - 1)
End If
ElseIf lTypeValue = REG_BINARY Then
lRes = RegQueryValueEx(hKey, sValueName, 0, _
0, iData, lBufferSizeData)
If lRes = 0 Then
fRegAbfrageWert = iData
End If
End If
End If
End Function |