Registry: Einträge erzeugen und lesen

Hallo,

wie kann ich in VB6.0/Windows XP/2000 Einträge in der Registry erzeugen und nachher wieder lesen? Ich muss einige programmspezifische Einstellungen speichern…

Sebastian

Hallo Sebastian,

ich weiss nicht ob’s da in Win XP und 2000 Abweichungen gibt, aber mit VB6 und WinNT kann man dazu die Befehle
SaveSetting, GetSetting, GetAllSettings, DeleteSetting
benutzen.
z.B.: SaveSetting „MeinProgramm“, „Allgemeines“, „Pfad“,„C:\Irgendwo“
sPfad = GetSetting („MeinProgramm“, „Allgemeines“, „Pfad“)

Diese Befehle speichern die Angaben unter HKEY_LOCAL_USER\Software\VB and VBA Program Settings\ ab. Einfach mal ein bisschen in der Hilfe dazu nachlesen, zum speichern von programminternen Werten sollten diese Befehle eigentlich ausreichen.

Gruß
Daniel

…noch besser ist das Library RebObj.dll. Einfach mal im Netz suchen - ist eine geniale wenn auch schlecht dokumentierte API.

Hi,

…noch besser ist das Library RebObj.dll. Einfach mal im Netz
suchen - ist eine geniale wenn auch schlecht dokumentierte
API.

Sicherlich kann RegObj.dll viel mehr, um aber nur Einträge für mein eigenes Programm zu speichern und auszulesen ist das viel zu viel Overhead (schließlich muss ich dll ggf. mit verteilen, muss mich zum Registry-Zweig vorhangeln usw.). Wenn man wirklich was in der Registry anstellen will ist RegObj.dll sicherlich ganz gut, um nur ein paar Werte abzulegen eingeutig zu überdimensioniert.

Gruß
Daniel

…aber wer will schon „seine“ Registrykeys unter „VB and VBA“ haben und auf wichtige Datentypen verzichten?

Natürlich hat RegObj einen Overhead, aber um diese zu kompensieren läßt sich eine wiederverwendbare Klasse schreiben, die mit einer einzigen Function und wenigen Parameter genau das tut, was notwendig und gewünscht ist.

Ich kann ja mal die Klasse posten.

Klassencode:

Option Explicit

Public Enum regAction
 REG\_LOAD = 0
 REG\_SAVE = 1
End Enum

Public Enum regHive
 REG\_LOCAL = 0
 REG\_USER = 1
End Enum

Public Enum regType
 REG\_BIN = 3
 REG\_EXPSTR = 2
 REG\_LNG = 4
 REG\_NONE = 0
 REG\_STR = 1
End Enum

Private regRegistry As RegObj.Registry
Private regRegType As RegObj.RegValueType
Private regKey As RegObj.regKey
Private regKeys As RegObj.regKeys
Private regValue As RegObj.regValue
Private regValues As RegObj.regValues
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Public Function REG\_SETTING(ByVal rAction As regAction, \_
 ByVal rHive As regHive, \_
 ByVal rCompany As String, \_
 ByVal rProduct As String, \_
 ByVal rGroup As String, \_
 ByVal rSetting As String, \_
 ByVal rValue As String, \_
 Optional ByVal rType As regType) As Variant

 Dim strHive As String

On Error Resume Next

 'Enter rHive \ Software
 Select Case rHive
 Case regHive.REG\_USER
 strHive = "HKEY\_CURRENT\_USER"
 Case regHive.REG\_LOCAL
 strHive = "HKEY\_LOCAL\_MACHINE"
 End Select
 'Enter rCompany
retCompany:
 Set regRegistry = New Registry
 Set regKey = regRegistry.RegKeyFromString("\" & strHive & "\Software\")
 Set regKey = regKey.ParseKeyName(rCompany)
 If Err.Number = 35006 Then
 regKey.SubKeys.Add rCompany
 Err.Number = 0
 GoTo retCompany
 End If
 'Enter rProduct
retProduct:
 Set regKey = regRegistry.RegKeyFromString("\" & strHive & "\Software\" & rCompany & "\")
 Set regKey = regKey.ParseKeyName(rProduct)
 If Err.Number = 35006 Then
 regKey.SubKeys.Add rProduct
 Err.Number = 0
 GoTo retProduct
 End If
 'Enter rGroup
retGroup:
 Set regKey = regRegistry.RegKeyFromString("\" & strHive & "\Software\" & rCompany & "\" & rProduct & "\")
 Set regKey = regKey.ParseKeyName(rGroup)
 If Err.Number = 35006 Then
 regKey.SubKeys.Add rGroup
 Err.Number = 0
 GoTo retGroup
 End If
 'Get Collection
 Set regKeys = regKey.SubKeys
 Set regValues = regKey.Values
 'Enter rValue
retSetting:
 Select Case rAction
 Case regAction.REG\_LOAD
 REG\_SETTING = regValues.Item(rSetting).Value
 'If regValues.Item(rSetting).Value = "" Then \_
 regValues.Item(rSetting).Value = rValue
 Case regAction.REG\_SAVE
 regValues.Item(rSetting).Value = rValue
 End Select
 If Err.Number = 35006 Then
 regValues.Add rSetting, rValue, rType
 Err.Number = 0
 GoTo retSetting
 End If
 'Ready
 Set regValues = Nothing
 Set regValue = Nothing
 Set regKeys = Nothing
 Set regKey = Nothing

End Function
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Private Sub Class\_Initialize()
 Set regRegistry = New Registry
End Sub
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
Private Sub Class\_Terminate()
 Set regRegistry = Nothing
End Sub

Okay danke, das reicht völlig!