Schlüsselwerte aus der Windows-Registratur einlesen
Veröffentlicht am 30.12.2003
Spezielle Windows API-Funktionen erlaubt das Einlesen und Abspeichern von Registratur-Schlüsselwerten.
Anstelle von INI-Dateien arbeitet Windows seit der Version 95 hauptsächlich mit der sogenannten Registratur. Jeder Eintrag der Registratur besteht aus einem Schlüssel und einer Reihe von Werten.
Microsoft Excel speichert zum Beispiel den Namen des Standardordners für Dokumente in der Registratur. Um diesen Wert von Access aus einzulesen, werden zwei API-Funktionen benötigt, die zusammen mit einigen VBA-Konstanten in einem Modul deklariert werden müssen:
Public Const HKEY_CURRENT_USER = &H80000001
Public Const KEY_QUERY_VALUE = &H1
Public Const ERROR_SUCCESS = 0&
Public Const REG_SZ = 1
Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias _
"RegOpenKeyExA" (ByVal hKey As Long, _
ByVal lpSubKey As String, ByVal ulOptions As Long, _
ByVal samDesired As Long, 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 RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long
Folgenden VBA-Code können Sie einsetzen, um den Excel-Startordner anhand der oben deklarierten API-Funktionen zu ermitteln:
Public Function ExcelOrdnerAbfragen()
Dim strSchlüssel As String, lSchlüssel As Long
Dim strWert As String, lWertLänge As Long, dtWert As Long
strSchlüssel = "Software\Microsoft\Excel\9.0\Microsoft Excel"
If RegOpenKeyEx(HKEY_CURRENT_USER, strSchlüssel, _
ByVal 0&, KEY_QUERY_VALUE, lSchlüssel) _
= ERROR_SUCCESS Then
strWert = String(255, 0)
lWertLänge = Len(strWert)
dtWert = REG_SZ
If RegQueryValueEx(lSchlüssel, "DefaultPath", ByVal 0&, dtWert, ByVal strWert, lWertLänge) = ERROR_SUCCESS Then
strWert = Left(strWert, lWertLänge)
End If
RegCloseKey lSchlüssel
Debug.Print strWert
End If
End Function
Hier ist nur wichtig, dass Sie die jeweiligen Stringvariablen mit NULL-Werten initialisieren, und dass Sie NULL-Zeiger als ByVal 0& übergeben.
Die Funktion öffnet zunächst die Registratur mit der Berechtigung zum Abfragen des Schlüssels Software\Microsoft\Excel\9.0\Microsoft Excel. Ist diese Aktion gelungen, so wird der Schlüsselwert mit der Funktion RegQueryValueEx in den Variable strWert eingelesen, der anschließend von den überflüssigen NULL-Zeichen befreit.
Mit der Funktion RegCloseKey wird die Registratur ordnungsgemäß wieder geschlossen.