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