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 #
- Client.CreateRegistry – Registry-Objekt erzeugen
- SQL-Registry Dokumentation – Struktur und Hauptknoten der SQL-Registry