vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: COM/OLE/Registry/DLL · Windows-Registry   |   VB-Versionen: VB4, VB5, VB609.03.01
Registry im Griff

Speichern, Lesen und Löschen von Werten in die Windows-Registrierdatenbank

Autor:   Heinz PrelleBewertung:  Views:  79.078 
www.visual-basic5.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Um bestimmte Einstellungen in Ihrem Programm zu speichern können Sie neben der Verwaltung von INI-Dateien auch die Registrierdatenbank verwenden. Der nachfolgende Tipp zeigt, wie Sie einen Schlüssel in der Windows-Registry anlegen und entsprechende Werte speichern und wieder auslesen können. Nicht mehr benötigte Einträge lassen sich auch wieder löschen.

' zunächst alle benötigten API-Deklarationen
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
 
' Wert (String/Text) für einen bestimmten 
' Schlüsselnamen speichern. Sollte der Schlüssel nicht 
' existieren, wird dieser autom. erstellt.
' 
' Parameterbeschreibung
' ---------------------
' 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
 
Sub fStringSpeichern(hKey As Long, sPath As String, _
  sValue As String, iData As String)
 
  Dim vRet As Variant
 
  RegCreateKey hKey, sPath, vRet
  RegSetValueEx vRet, sValue, 0, REG_SZ, ByVal iData, _
    Len(iData)
  RegCloseKey vRet
End Sub
 
 
' Wert (Binär 0-255) für einen bestimmten 
' Schlüsselnamen speichern. Sollte der Schlüssel nicht 
' existieren, wird dieser autom. erstellt.
' 
' Parameterbeschreibung
' ---------------------
' 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
 
Sub fStringSpeichernLong(hKey As Long, sPath As String, _
  sValue As String, iData As String)
 
  Dim vRet As Variant
 
  RegCreateKey hKey, sPath, vRet
  RegSetValueEx vRet, sValue, 0, REG_BINARY, _
    CByte(iData), 4
  RegCloseKey vRet
End Sub
 
 
' Wert für einen bestimmten 
' Schlüsselnamen auslesen. 
' 
' Parameterbeschreibung
' ---------------------
' 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
 
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
 
 
' Löschen eines Schlüsselnamens
' 
' Parameterbeschreibung
' ---------------------
' hKey (Hauptschlüssel) : z.B. HKEY_CURRENT_USER
' sPath (Schlüsselpfad) : z.B. MeineAnwendung
' sValue (Schlüsselname): z.B. Path
 
Sub fWerteLoeschen(hKey As Long, sPath As String, _
  sValue As String)
 
  Dim vRet As Variant
 
  RegCreateKey hKey, sPath, vRet
  RegDeleteValue vRet, sValue
  RegCloseKey vRet
End Sub

Beispiel:
In Ihrer Anwendung möchten Sie den zuletzt für einen Ausdruck benutzen Drucker in der Registry speichern (fStringSpeichern). Vor dem Drucken soll dieser Drucker dann als Standard-Auswahl zur Verfügung stehen (fWertLesen).

' zuletzt eingestellten Drucker ermitteln
Dim prnName As String
prnName = fWertLesen(HKEY_CURRENT_USER, _
  "MeineAnwendung", "Drucker")
 
' Wenn noch kein Eintrag gespeichert ist,
' soll der Standard-Drucker verwendet werden
If prnName = "" Then prnName = Printer.DeviceName
 
' Druckerauswahl...
...
 
' Auswahl speichern
fStringSpeichern HKEY_CURRENT_USER, "MeineAnwendung", _
  "Drucker", prnName

Um nicht mehr benötigte Einträge in der Registry wieder zu löschen, steht die Funktion fWerteLoeschen zur Verfügung.

' Löschen der Druckerauswahl
fWerteLoeschen HKEY_CURRENT_USER, "MeineAnwendung", _
  "Drucker"



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.