Geschrieben von waterloo am 05.06.2004, 19:17

Les- und Schreibzugriff auf die Registrierung

In diesem Tutorial möchte ich Euch ein paar Möglichkeiten präsentieren, wie man mit der Registry arbeiten kann. Es ist manchmal sehr hilfreich, kleinere Daten in der Registrierung zu speichern, um nicht extra eine Datei auslesen zu müssen, wobei beides seine Vor- und Nachteile hat ;-)
Nun gut, fangen wir mit der leichten/einfachen Variante an.

1. Einfache Variante

Ich bevorzuge diese Variante, die diese zwar sehr schlicht ist, aber einfach zu handhaben.

Bei beiden Funktionen verwendet er einen bestimmten Pfad in der Registry, den man auch nicht beeinflussen kann:
Arbeitsplatz\HKEY_CURRENT_USER\Software\VB and VBA Program Settings

Der Pfad kann je nach Betriebsystem variieren.

Auslesen aus der Registry:

Inhalt = GetSetting("Schlüsselname", "Unterordner", "Wertname")

Hierbei ist zu beachten, das die Variable "Inhalt" als String vordeklariert werden muss.

Schreiben in die Registry:

SaveSetting "Schlüsselname", "Unterordner", "Wertname", Inhalt

Auch hier muss die Variable "Inhalt" als String deklariert sein.

2. Umfangreiche Variante

Bei dieser Variante kann man unter Verwendung der API so ziemlich alles in der Registry anwählen, was man will.

Funktionen vordeklarieren:

Am besten man macht dies in einem Modul, geht aber auch im allgemeinen Teil der Form.

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 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

Private Declare Function RegCloseKey Lib "advapi32.dll" _
(ByVal hKey As Long) As Long

Private Declare Function RegCreateKey Lib "advapi32.dll" _
Alias "RegCreateKeyA" (ByVal hKey As Long, _
ByVal lpSubKey As String, phkResult As Long) As Long

Private Declare Function RegDeleteValue Lib "advapi32.dll" _
Alias "RegDeleteValueA" (ByVal hKey As Long, _
ByVal lpValueName As String) As Long

Const HKEY_CURRENT_USER = &H80000001
Const REG_SZ = 1
Const REG_BINARY = 3

So, kommen wir gleich zu den einzelnen Funktionen.

Funktion, um einen String/Text in der Registry zu speichern:

Sub fStringSpeichern(hKey As Long, sPath As String, _
sValue As String, iData As String)

Dim vRet As Variant

'hKey (Hauptschlüssel) : z.B. HKEY_CURRENT_USER
'sPath (Schlüsselpfad) : z.B. MeineAnwendung
'sValue (Schlüsselname): z.B. Path
'iData (Schlüsselwert) : z.B. c:\programme\MeineAnwendung

RegCreateKey hKey, sPath, vRet
RegSetValueEx vRet, sValue, 0, REG_SZ, ByVal iData, _
Len(iData)
RegCloseKey vRet
End Sub

Funktion um einen BinärWert (0-255) zu speichern:

Sub fStringSpeichernLong(hKey As Long, sPath As String, _
sValue As String, iData As String)

Dim vRet As Variant

'hKey (Hauptschlüssel) : z.B. HKEY_CURRENT_USER
'sPath (Schlüsselpfad) : z.B. MeineAnwendung
'sValue (Schlüsselname): z.B. Code
'iData (Schlüsselwert) : z.B. 220

RegCreateKey hKey, sPath, vRet
RegSetValueEx vRet, sValue, 0, REG_BINARY, _
CByte(iData), 4
RegCloseKey vRet
End Sub

Funktion, um einen Wert aus einem Schlüssel auslesen:

Function fWertLesen(hKey As Long, sPath As String, _
sValue As String)

Dim vRet As Variant

'hKey (Hauptschlüssel) : z.B. HKEY_CURRENT_USER
'sPath (Schlüsselpfad) : z.B. MeineAnwendung
'sValue (Schlüsselname): z.B. Path
'Rückgabewert : z.B. c:\programme\MeineAnwendung

RegOpenKey hKey, sPath, vRet
fWertLesen = fRegAbfrageWert(vRet, sValue)
RegCloseKey vRet
End Function

Vorangehende Funktion benötigt noch nachfolgende Funktion, um den Typ des Wertes zu identifizieren.

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

Funktion, um ein Schlüssel zu löschen:

Sub fWerteLoeschen(hKey As Long, sPath As String, _
sValue As String)

Dim vRet As Variant

'hKey (Hauptschlüssel) : z.B. HKEY_CURRENT_USER
'sPath (Schlüsselpfad) : z.B. MeineAnwendung
'sValue (Schlüsselname): z.B. Path

RegCreateKey hKey, sPath, vRet
RegDeleteValue vRet, sValue
RegCloseKey vRet
End Sub

Anwendungsbeispiele:

Hier möchte man den Pfad des Programms in der Registrierung speichern ...

Dim pfadname As String
pfadname = App.Path

fStringSpeichern HKEY_CURRENT_USER, "MeineAnwendung", _
"Pfad", pfadname

... hier wieder auslesen ...

Dim pfadname As String

pfadname = fWertLesen(HKEY_CURRENT_USER, _
"MeineAnwendung", "Pfad")

... und hier löschen

fWerteLoeschen HKEY_CURRENT_USER, "MeineAnwendung", "Pfad"

Solltet ihr Probleme bei der Anwendung dieser Funktionen haben, stehe ich Euch gerne zur Verfügung (waterloothebest@yahoo.de).

Bewertung Anzahl
6
100,0 %
1 Bewertungen