Registry-Tipp

Eindimensionales Feld in der Registry ablegen und wieder auslesen

Will man ein eindimensionales Array in der Registry ablegen, ist dies sehr aufwendig. Es muss jedes Element einzeln abgespeichert und beim Auslesen wieder einzeln ausgelesen und zu einem Array zusammengesetzt werden.
In einem VB-Skript ist es einfacher das Feld mit dem join-Befehl in einen String zu verwandeln und diesen in der Registry abzuspeichern. Wenn man den String wieder ausliest, lässt sich das Array mit dem split-Befehl auf einfache Weise wieder rekonstruieren.

Es gibt allerdings das Problem, dass das Array nicht mit einem Dim- oder Redim-Befehl erstellt sein darf. Da muss ein wenig getrickst werden, indem man das Array anfangs auch mit dem split-Befehl aus einem String, der nur aus Trennzeichen besteht, erstellt. Die Anzahl der Trennzeichen muss dem gewünschten höchsten Indexwert des zu erstellenden Arrays entsprechen.

Beispiel 1:
const regschluessel = "JoinTest"
Dim zeichenfolge,Feld
'als Trennzeichen wird hier das Pipezeichen "|" verwendet

'### aus der Registry auslesen
zeichenfolge = FF_GetProfile(regschluessel,"zeichenfolge")
if len(zeichenfolge) = 0 then
    zeichenfolge = "|||"    '3 Trennzeichen für Feld(0) bis Feld(3)
end if
Feld = split(zeichenfolge,"|")
 
'## Feld beliebig füllen oder Inhalte ändern, z.B.:
Feld(0) = "A"
Feld(1) = "B"
Feld(2) = "C"
Feld(3) = "D"
 
'### in die Registry schreiben
zeichenfolge = join(Feld,"|")
FF_WriteProfile regschluessel,"zeichenfolge",zeichenfolge
 
Man kann aber auch mit einem zweiten Feld arbeiten, im nächsten Beispiel mit Feld1, in das die der Registry entnommenen Werte übertragen werden.

Beispiel 2:
const regschluessel = "JoinTest1"
Dim zeichenfolge,n,Feld,Feld1(3)
'als Trennzeichen wird hier das Pipezeichen "|" verwendet

'### aus der Registry auslesen
zeichenfolge = FF_GetProfile(regschluessel,"zeichenfolge")
if len(zeichenfolge) > 0 then
    Feld = split(zeichenfolge,"|")
    for n = 0 to ubound(Feld)
        Feld1(n) = Feld(n)
    next
end if
 
for n = 0 to 3 : Msgbox Feld1(n) : next
 
'## Feld1 beliebig füllen oder Inhalte ändern, z.B.:
Feld1(0) = "A"
Feld1(1) = "B"
Feld1(2) = "C"
Feld1(3) = "D"
 
'### in die Registry schreiben
zeichenfolge = join(Feld1,"|")
FF_WriteProfile regschluessel,"zeichenfolge",zeichenfolge
Wenn man obige Beispiele testweise ausführt, sollte man nicht vergessen, die erzeugten Schlüssel in der Registry wieder zu löschen. Zu finden sind sie unter
HKEY_CURRENT_USER\Software\Joachim Koopmann Software\FixFoto\Script\

Hinweis:
Angewendet wurde die Methode nach Beispiel 1 im Skript "ScaleAll" zum Sichern der Parameter für verschiedene Schärfungsmethoden in der Registry