vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  79.086 
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"

Dieser Tipp wurde bereits 79.086 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel