1. mit FF-Befehlen

Die Befehle FF_WriteProfile und FF_GetProfile schreiben bzw. lesen (nur!) im Registry-Pfad HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script\. Der Befehl FF_DeleteProfile löscht einzelne Schlüssel oder die gesamte Sektion.

Schreiben und Lesen

RegSection = "DemoScript"
 
FF_WriteProfile RegSection,"Key", "Wert des Schlüssels"   ' Wert schreiben
Variable = FF_GetProfile(RegSection,"Key")                ' Wert lesen

Löschen

RegSection = "DemoScript"
 
FF_WriteProfile RegSection,"Key", "Wert des Schlüssels"   ' Wert schreiben

FF_DeleteProfile RegSection,"Key"                         ' löscht einen Schlüssel (ab 3.10 B41)
FF_DeleteProfile RegSection,""                            ' löscht die gesamte Sektion (ab 3.10 B41)
Wird der letzte verbliebene Schlüssel gelöscht, so erfolgt zugleich auch die Löschung der Sektion.

Boolsche Werte

True wird in der Registry als "-1" gespeichert.
False wird der Registry als "0" gespeichert.

2. mit Mitteln des Betriebssystems

Die Registry kann auch mit Hilfe des WshShell-Object (Windows Script Host) oder der Windows Management Instrumentation (WMI) manipuliert werden.

Erstellen, Verändern, Löschen

Quelle
Dim WSHShell
Set WSHShell = CreateObject("WScript.Shell")
 
WSHShell.Popup "Erstellt Key HKCU\MyRegKey mit Wert 'Top level key'"
WSHShell.RegWrite "HKCU\MyRegKey\", "Top level key"
 
WSHShell.Popup "Erstellt Key HKCU\MyRegKey\Entry mit Wert 'Second level key'"
WSHShell.RegWrite "HKCU\MyRegKey\Entry\", "Second level key"
 
WSHShell.Popup "Wert HKCU\MyRegKey\Value auf REG_SZ 1 setzen"
WSHShell.RegWrite "HKCU\MyRegKey\Value", 1
 
WSHShell.Popup "Wert HKCU\MyRegKey\Entry auf REG_DWORD 2 setzen"
WSHShell.RegWrite "HKCU\MyRegKey\Entry", 2, "REG_DWORD"
 
WSHShell.Popup "Wert HKCU\MyRegKey\Entry\Value1 auf REG_BINARY 3 setzen"
WSHShell.RegWrite "HKCU\MyRegKey\Entry\Value1", 3, "REG_BINARY"
 
WSHShell.Popup "Löscht Wert HKCU\MyRegKey\Entry\Value1"
WSHShell.RegDelete "HKCU\MyRegKey\Entry\Value1"
 
WSHShell.Popup "Löscht Key HKCU\MyRegKey\Entry"
WSHShell.RegDelete "HKCU\MyRegKey\Entry\"
 
WSHShell.Popup "Löscht Key HKCU\MyRegKey"
WSHShell.RegDelete "HKCU\MyRegKey\"

Prüfen, ob Schlüssel existiert / Lesen

Function CheckRegKey(Key)
     ' prüft, ob ein bestimmter Schlüssel vorhanden ist
     ' z.B. "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Path"
     ' nicht geeignet für die Prüfung von Registryknoten     
     Dim result
     Dim WSHShell
     Set WSHShell = CreateObject("WScript.Shell")
     On Error Resume Next
     result = WSHShell.RegRead(Key)
     If result = "" then
          CheckRegKey = false        ' Schlüssel existiert nicht
     Else
          CheckRegKey = true        ' Schlüssel existiert
     End If
End Function

Löschen

' Bsp.: Löschen einer Sektion (funktioniert nicht, wenn Unterzweige existieren)
RegSchluessel = "\FF_ScaleAll\"        ' wichtig ist das "\" am Ende
TempS = "HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script" & RegSchluessel
 
Set WshShell = CreateObject("WScript.Shell")
WshShell.RegDelete(TempS)

Sub DeleteKey(Rootkey, KeyPath)
     ' Zweige in der Registry löschen, einschließlich aller Unterzweige
     ' Autor: Thomas@Gartner-IT.net
     ' http://www.it-visions.de/foren/display_message.asp?mid=568
     ' verwendet: WMI
     ' Rootkey bezeichnet den RootKey
         ' HKEY_CLASSES_ROOT = &H80000000
         ' HKEY_CURRENT_USER = &H80000001
         ' HKEY_LOCAL_MACHINE = &H80000002
         ' HKEY_USERS = &H80000003
         ' HKEY_CURRENT_CONFIG = &H80000005
         ' HKEY_DYN_DATA = &H80000006
    ' KeyPath bezeichnet den zu löschenden Zweig
        ' z.B. "Software\Joachim Koopmann Software\FixFoto\SaveState\Ansicht2"
     Dim objReg
     Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv")
     Dim ValueArray, Value
     ' Unterschlüssel auflisten
     objReg.EnumKey Rootkey, KeyPath, ValueArray
     If Not IsNull(ValueArray) Then
         For Each Value In ValueArray
            ' Rekursion starten
            DeleteKey Rootkey, KeyPath + "\" + Value
         Next
     End If
     ' Schlüssel löschen
     objReg.DeleteKey Rootkey, KeyPath + "\" + Value
 End Sub

Windows-Version

' Windows-Version ermitteln
Set WshShell = CreateObject("WScript.Shell")
winversion = WshShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")

Prüfen, ob Knoten existiert

Function CheckRegNode (Rootkey, SubPath, Node)
     ' prüft, ob ein bestimmter Unterknoten in einem Registrypfad vorhanden ist
     ' GroßKleinSchreibung ist egal
     ' Rootkey bezeichnet den RootKey
          ' HKEY_CLASSES_ROOT     = &H80000000
          ' HKEY_CURRENT_USER     = &H80000001
          ' HKEY_LOCAL_MACHINE    = &H80000002
          ' HKEY_USERS            = &H80000003
          ' HKEY_CURRENT_CONFIG   = &H80000005
     ' Subpath bezeichnet den weiteren Pfad
          ' Bsp.: "Software\Joachim Koopmann Software\FixFoto"
     ' Node bezeichnet den zu prüfenden Knoten
        ' Bsp.: "Options"
     Dim objReg, i
     Dim arrSubKeys, strSubKey, strKeys
     Set objReg = GetObject("winmgmts://./root/default:StdRegProv")
     objReg.EnumKey Rootkey, SubPath, arrSubKeys
     CheckRegNode = False
     Node = UCase(Node)
     for i = 0 to UBound(arrSubKeys) -1
        if UCase(arrSubKeys(i)) = Node then CheckRegNode = True
     next
     Set objReg = Nothing
End Function

alle Knoten einer Ebene ermitteln

Function RegSubKeys (Rootkey, SubPath)
     ' liefert ein Array mit allen Unterknoten zu einem Registrypfad
     ' Rootkey bezeichnet den RootKey
          ' HKEY_CLASSES_ROOT     = &H80000000
          ' HKEY_CURRENT_USER     = &H80000001
          ' HKEY_LOCAL_MACHINE    = &H80000002
          ' HKEY_USERS            = &H80000003
          ' HKEY_CURRENT_CONFIG   = &H80000005
     ' Subpath bezeichnet den weiteren Pfad
          ' Bsp.: Software\Joachim Koopmann Software\FixFoto
     Dim objReg
     Dim arrSubKeys, strSubKey, strKeys
     Set objReg = GetObject("winmgmts://./root/default:StdRegProv")
     objReg.EnumKey Rootkey, SubPath, arrSubKeys
     RegSubKeys = arrSubKeys
     Set objReg = Nothing
End Function

alle Schlüssel einer Ebene ermitteln

Function RegSubValues (Rootkey, SubPath)
    ' liefert ein Array mit allen Schlüsseln zu einem Registrypfad
    ' und dem Typ des jeweiligen Schlüssels
    ' Rootkey bezeichnet den RootKey
    '     HKEY_CLASSES_ROOT     = &H80000000
    '     HKEY_CURRENT_USER     = &H80000001
    '     HKEY_LOCAL_MACHINE    = &H80000002
    '     HKEY_USERS            = &H80000003
    '     HKEY_CURRENT_CONFIG   = &H80000005
    ' Subpath bezeichnet den weiteren Pfad
    '     Bsp.: Software\Joachim Koopmann Software\Text
    Dim oReg
    Dim arrValueNames, arrValueTypes
    Dim i, sammelarr()
    Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
    oReg.EnumValues Rootkey, SubPath, arrValueNames, arrValueTypes
    ReDim sammelarr (UBound(arrValueNames),1)
    For i=0 To UBound(arrValueNames)
        sammelarr(i,0) = arrValueNames(I)
        Select Case arrValueTypes(I)
            Case 1    sammelarr(i,1) = "String"
            Case 2    sammelarr(i,1) = "Expanded String"
            Case 3    sammelarr(i,1) = "Binary"
            Case 4    sammelarr(i,1) = "DWORD"
            Case 7    sammelarr(i,1) = "Multi String"
        End Select
    Next
    RegSubValues = sammelarr
    Set oReg = Nothing
End Function


weiteres Bsp.: Auslesen der FTP-Einstellungen von FF

3. weiterführende Informationen

http://www.wintotal.de/artikel/artikel-2004/7125.html
http://www.source-center.de/forum/showthread.php?758-Erstellen-L%F6schen-Editieren-%DCberpr%FCfen-von-Registrierungsschl%FCsseln
http://msdn.microsoft.com/en-us/library/windows/desktop/aa393664(v=VS.85).aspx
zu Regedit:
http://www.winfaq.de/faq_html/Content/tip2000/onlinefaq.php?h=tip2045.htm

arrValueNames, arrValueTypesRegSubKeys = arrSubKeys
Set objReg = Nothing