Registry Objekt
Zuletzt geändert: 02.02.2026 21:41

Registry-Objekt (iScript) #

Das Registry-Objekt ermöglicht den Zugriff auf die SQL-Registry, Datei-basierte Registries (.cnreg-Format) und flüchtige RAM-Registries. Es wird über Client.CreateRegistry erzeugt.

Set reg = Client.CreateRegistry("CLIENT:", "\OBJECTS\ACTIONS", "")

Eigenschaft #

Rootname #

Der Root-Pfad des Registry-Objekts (lesend und schreibend).

s = reg.Rootname           ' Aktuellen Root-Pfad lesen
reg.Rootname = "\USER"     ' Root-Pfad ändern

Datentyp-Konstanten #

Konstante Wert Beschreibung
REGDT_None 0 Kein Typ / nicht vorhanden
REGDT_Unknown 1 Unbekannter Typ
REGDT_String 2 Zeichenkette
REGDT_Integer 3 Ganzzahl (DWORD)
REGDT_Binary 4 Binärdaten
REGDT_Float 5 Gleitkommazahl

Clone-Flags #

Konstante Wert Beschreibung
REG_CloneNoRoot 0 Klont mit ursprünglicher Root (Standard)
REG_CloneRoot 1 Aktueller Schlüssel wird zur neuen Root

Erläuterung zu REG_CloneRoot: Der aktuell geöffnete Schlüssel wird in der geklonten Registry zur neuen Wurzel. Absolute Pfade wie \test beziehen sich dann auf diesen Punkt, nicht auf die ursprüngliche Root.

' Beispiel: Original-Registry, aktueller Schlüssel ist "\OBJECTS\ACTIONS"
Set reg = Client.CreateRegistry("CLIENT:", "\OBJECTS\ACTIONS", "")

' Mit REG_CloneRoot: "\OBJECTS\ACTIONS" wird zur neuen Root
Set reg2 = reg.Clone(1)
reg2.OpenKey "\MeinMenüpunkt"   ' Öffnet tatsächlich "\OBJECTS\ACTIONS\MeinMenüpunkt"

' Mit REG_CloneNoRoot: Root bleibt "\"
Set reg3 = reg.Clone(0)
reg3.OpenKey "\USER"            ' Öffnet "\USER" (absolute Navigation möglich)

Methoden #

Schlüssel-Navigation #

OpenKey #

Öffnet einen Unterschlüssel relativ zum aktuellen Pfad.

Function OpenKey(Key As String) As Boolean
Parameter Beschreibung
Key Pfad zum Unterschlüssel (relativ)

Rückgabe: True wenn der Schlüssel existiert und geöffnet wurde.

If reg.OpenKey("Actions") Then
  ' Schlüssel wurde geöffnet
End If

OpenCreateKey #

Öffnet einen Unterschlüssel oder erstellt ihn, falls nicht vorhanden.

Function OpenCreateKey(Key As String) As Boolean
If reg.OpenCreateKey("MeineEinstellungen") Then
  reg.Write "Option1", "Wert"
End If

CreateKey #

Erstellt einen neuen Unterschlüssel.

Function CreateKey(Key As String) As Boolean

Rückgabe: True wenn der Schlüssel erstellt wurde.

DeleteKey #

Löscht einen Unterschlüssel (inkl. aller Unterwerte).

Function DeleteKey(Key As String) As Boolean

Rückgabe: True wenn der Schlüssel gelöscht wurde.

RenameKey #

Benennt einen Unterschlüssel um.

Function RenameKey(OldKey As String, NewKey As String) As Boolean
If reg.RenameKey("AlterName", "NeuerName") Then
  ' Schlüssel wurde umbenannt
End If

KeyExists #

Prüft ob ein Unterschlüssel existiert.

Function KeyExists(Key As String) As Boolean
If reg.KeyExists("MeineEinstellungen") Then
  ' Schlüssel vorhanden
End If

HasSubKeys #

Prüft ob der aktuelle Schlüssel Unterschlüssel enthält.

Function HasSubKeys() As Boolean

GetKeyNames #

Liefert alle Unterschlüsselnamen als mehrzeiligen String (ein Name pro Zeile).

Function GetKeyNames() As String
Dim keys, arr, i
keys = reg.GetKeyNames
arr = Split(keys, vbCrLf)
For i = 0 To UBound(arr)
  If arr(i) <> "" Then
    MsgBox "Schlüssel: " & arr(i)
  End If
Next

GetTimestamp #

Liefert den Zeitstempel eines Schlüssels.

Function GetTimestamp(Key As String) As String

Werte lesen und schreiben #

Read #

Liest einen Wert. Liefert Empty wenn der Wert nicht existiert.

Function Read(Name As String) As Variant
wert = reg.Read("MeinWert")
If IsEmpty(wert) Then
  MsgBox "Wert nicht vorhanden"
End If

ReadDef #

Liest einen Wert mit Standardwert, falls nicht vorhanden.

Function ReadDef(Name As String, Default As Variant) As Variant
' Gibt "Standard" zurück, wenn "MeinWert" nicht existiert
wert = reg.ReadDef("MeinWert", "Standard")

Write #

Schreibt einen Wert (Typ wird automatisch erkannt).

Function Write(Name As String, Value As Variant) As Boolean
reg.Write "TextWert", "Hallo Welt"
reg.Write "ZahlWert", 42
reg.Write "FloatWert", 3.14

WriteType #

Schreibt einen Wert mit expliziter Typangabe.

Function WriteType(Name As String, Value As Variant, ValueType As Integer) As Boolean
ValueType Konstante Beschreibung
2 REGDT_String Als String speichern
3 REGDT_Integer Als Integer (DWORD) speichern
4 REGDT_Binary Als Binärdaten speichern
5 REGDT_Float Als Float speichern
' Zahl explizit als String speichern
reg.WriteType "Version", "123", 2

WriteText #

Schreibt einen Textwert (immer als String).

Function WriteText(Name As String, Value As String) As Boolean

Werte verwalten #

ValueExists #

Prüft ob ein Wert existiert.

Function ValueExists(Name As String) As Boolean
If reg.ValueExists("MeinWert") Then
  wert = reg.Read("MeinWert")
End If

DeleteValue #

Löscht einen Wert.

Function DeleteValue(Name As String) As Boolean

RenameValue #

Benennt einen Wert um.

Function RenameValue(OldName As String, NewName As String) As Boolean

GetValueNames #

Liefert alle Wertnamen als mehrzeiligen String (ein Name pro Zeile).

Function GetValueNames() As String
Dim names, arr, i
names = reg.GetValueNames
arr = Split(names, vbCrLf)
For i = 0 To UBound(arr)
  If arr(i) <> "" Then
    MsgBox arr(i) & " = " & reg.Read(arr(i))
  End If
Next

GetDataType #

Liefert den Datentyp eines Werts (siehe Datentyp-Konstanten).

Function GetDataType(Name As String) As Integer
Select Case reg.GetDataType("MeinWert")
  Case 2: MsgBox "String"
  Case 3: MsgBox "Integer"
  Case 4: MsgBox "Binary"
  Case 5: MsgBox "Float"
End Select

GetDataSize #

Liefert die Größe eines Werts in Bytes.

Function GetDataSize(Name As String) As Integer

Import und Export #

LoadFromFile #

Lädt eine Registry-Datei (.cnreg-Format) in den aktuellen Schlüssel.

Sub LoadFromFile(Filename As String)
reg.OpenCreateKey "Import"
reg.LoadFromFile "C:\Daten\export.cnreg"

SaveToFile #

Speichert den aktuellen Schlüssel (inkl. Unterschlüssel) in eine Datei.

Sub SaveToFile(Filename As String)
reg.OpenKey "\OBJECTS\ACTIONS"
reg.SaveToFile "C:\Daten\actions.cnreg"

LoadText #

Importiert einen Registry-Text (cnreg-Format als String) in den aktuellen Schlüssel. Funktioniert wie “Einfügen” im Registry-Editor.

Sub LoadText(Text As String)
Dim s
s = "CnRegEdit1" & vbCrLf & _
    "[\MeinSchlüssel]" & vbCrLf & _
    """Wert1""=""Test"""
reg.LoadText s

SaveText #

Exportiert den aktuellen Schlüssel (inkl. Unterschlüssel) als String im cnreg-Format.

Function SaveText() As String
reg.OpenKey "\USER\.ALLUSER\Einstellungen"
s = reg.SaveText
MsgBox s

Klonen #

Clone #

Erzeugt eine Kopie des Registry-Objekts.

Function Clone(Flags As Integer) As Object
Flag Konstante Beschreibung
0 REG_CloneNoRoot Klont mit ursprünglicher Root (Standard)
1 REG_CloneRoot Aktueller Schlüssel wird zur neuen Root

Mit REG_CloneRoot wird der aktuell geöffnete Schlüssel zur Wurzel der geklonten Registry. Das ist nützlich, um einen Teilbaum isoliert zu bearbeiten.

' Teilbaum isolieren: "\OBJECTS\BANDS" wird zur Root
Set reg = Client.CreateRegistry("CLIENT:", "\OBJECTS\BANDS", "")
Set regBands = reg.Clone(1)

' In regBands ist jetzt "\" = "\OBJECTS\BANDS" der Original-Registry
regBands.OpenKey "\cnsoft.Adresse.Info"  ' Relativ zur neuen Root

Das cnreg-Dateiformat #

Das cnreg-Format ist ein Textformat ähnlich Windows .reg-Dateien:

CnRegEdit1

[\PFAD\ZUM\SCHLÜSSEL]
"Wertname"="Stringwert"
"Wertname"=dword:00000001
"Wertname"=float:3.14
"Wertname"=hex:48,65,6C,6C,6F

Header: Jede cnreg-Datei beginnt mit CnRegEdit1.

Schlüssel: In eckigen Klammern, mit Backslash als Trenner.

Werte:

Syntax Beschreibung
"Name"="Wert" String-Wert
"Name"=dword:XXXXXXXX Integer (hexadezimal)
"Name"=float:X.XX Gleitkommazahl
"Name"=hex:XX,XX,... Binärdaten (Hex-Bytes)

Beispiele #

Benutzereinstellung lesen/schreiben #

Dim reg, fensterPos
Set reg = Client.CreateRegistry("CURRENT_USER", "MeinProgramm", "")

' Einstellung lesen mit Standardwert
fensterPos = reg.ReadDef("FensterPosition", "100,100,800,600")

' Einstellung speichern
reg.Write "FensterPosition", "200,150,1024,768"
reg.Write "LetzterAufruf", Now

Alle Werte eines Schlüssels auflisten #

Dim reg, names, arr, i, name, wert
Set reg = Client.CreateRegistry("CLIENT:", "\OBJECTS\ACTIONS\cnsoft.Developer.CreateConsole", "")

names = reg.GetValueNames
arr = Split(names, vbCrLf)
For i = 0 To UBound(arr)
  name = arr(i)
  If name <> "" Then
    wert = reg.Read(name)
    ellib.DebugOut "Registry", name & " = " & wert
  End If
Next

Registry-Zweig exportieren #

Dim reg
Set reg = Client.CreateRegistry("CLIENT:", "\USER\.ALLUSER", "")
reg.SaveToFile "C:\Backup\alluser.cnreg"

Registry-Datei importieren #

Dim reg
Set reg = Client.CreateRegistry("CLIENT:", "\VENDOR\meinepartner", "")
reg.OpenCreateKey "Einstellungen"
reg.LoadFromFile "C:\Import\settings.cnreg"

Siehe auch #