Einzelnen Beitrag anzeigen

Benutzerbild von mh166
mh166

Registriert seit: 14. Nov 2004
Ort: Chemnitz
443 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: registry-exporte (*.reg) einlesen?

  Alt 27. Jun 2005, 19:25
Zitat von DGL-luke:
ich komm dann in zwei jahren wieder wenn ichs geschafft hab
Ich bin nicht der Meinung, dass das Ganze so ein großes Problem sein wird... Hier mal mein Lösungsansatz (auch wenns mit parsen ist, aber anders wirds wohl nich gehen... Auch ne Kompo kann das nich anders):

Zitat von Test.reg:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\_Just Some Test!]
@="Standard-Wert"
"REG_SZ - Zeichenfolge"="REG_SZ - Zeichenfolge"
"REG_BINARY - Binär"=hex:ff,1a,b4,d6,23
"REG_DWORD - DWORD"=dword:23000005
"REG_MULTI_SZ - Wert der mehrteiligen Zeichenfolge"=hex(7):44,00,61,00,73,00,\
20,00,69,00,73,00,74,00,20,00,65,00,69,00,6e,00,65 ,00,20,00,5a,00,65,00,69,\
00,6c,00,65,00,21,00,00,00,55,00,6e,00,64,00,20,00 ,64,00,69,00,65,00,20,00,\
7a,00,77,00,65,00,69,00,74,00,65,00,21,00,00,00,55 ,00,6e,00,64,00,20,00,68,\
00,69,00,65,00,72,00,20,00,65,00,69,00,6e,00,65,00 ,20,00,64,00,72,00,69,00,\
74,00,74,00,65,00,2e,00,2e,00,2e,00,00,00,2e,00,2e ,00,2e,00,73,00,6f,00,77,\
00,69,00,65,00,20,00,65,00,69,00,6e,00,65,00,20,00 ,76,00,69,00,65,00,72,00,\
74,00,65,00,20,00,5a,00,65,00,69,00,6c,00,65,00,2e ,00,00,00,53,00,63,00,68,\
00,6c,00,75,00,73,00,73,00,20,00,6a,00,65,00,74,00 ,7a,00,74,00,2c,00,20,00,\
67,00,65,00,6e,00,75,00,67,00,20,00,67,00,65,00,74 ,00,65,00,73,00,74,00,65,\
00,74,00,21,00,00,00,00,00
"REG_EXPAND_SZ - Wert der erweiterbaren Zeichenfolge"=hex(2):41,00,6c,00,73,00,\
6f,00,20,00,77,00,61,00,73,00,20,00,64,00,65,00,72 ,00,20,00,55,00,6e,00,74,\
00,65,00,72,00,73,00,63,00,68,00,69,00,65,00,64,00 ,20,00,7a,00,77,00,69,00,\
73,00,63,00,68,00,65,00,6e,00,20,00,52,00,45,00,47 ,00,5f,00,45,00,58,00,50,\
00,41,00,4e,00,44,00,5f,00,53,00,5a,00,20,00,75,00 ,6e,00,64,00,20,00,6e,00,\
75,00,72,00,20,00,52,00,45,00,47,00,5f,00,53,00,5a ,00,20,00,69,00,73,00,74,\
00,2e,00,2e,00,2e,00,20,00,49,00,63,00,68,00,20,00 ,77,00,65,00,69,00,df,00,\
20,00,65,00,73,00,20,00,6e,00,69,00,63,00,68,00,74 ,00,2e,00,20,00,57,00,61,\
00,68,00,72,00,73,00,63,00,68,00,65,00,69,00,6e,00 ,6c,00,69,00,63,00,68,00,\
20,00,6e,00,75,00,72,00,20,00,64,00,69,00,65,00,20 ,00,4c,00,e4,00,6e,00,67,\
00,65,00,2e,00,20,00,4e,00,61,00,6a,00,61,00,2c,00 ,20,00,64,00,61,00,73,00,\
20,00,73,00,6f,00,6c,00,6c,00,20,00,6a,00,61,00,20 ,00,61,00,75,00,63,00,68,\
00,20,00,6e,00,75,00,72,00,20,00,6e,00,65,00,20,00 ,44,00,65,00,6d,00,6f,00,\
20,00,73,00,65,00,69,00,6e,00,21,00,00,00

[HKEY_CURRENT_USER\Software\_Just Some Test!\Another Subkey]
So, dass ist mal ein Test, in dem ich alle REG_*-Arten verwendet habe. Man sieht, dass das Prinup immer gleich ist:
Die Datei beginnt mit der Versionsangabe des Reg-Edits. Für alle Fälle kannste ja auch alle Zeilen bis zum ersten '[' wegschnippeln oder in nem zusätzlichen Info-Memo anzeigen lassen.

Der "Pfad" zum Schlüssel wird als INI-Section gespeichert. D.h. du brauchst nur die Sections raussuchen und diese dann am '\' trennen, um den nächsten Unterschlüssel zu bekommen. Das kannst du dann in ein dynamisches Array speichern und das dann der Reihe nach durchlaufen. Existiert der gewünschte Schlüssel, dann wird der entsprechende TTreeNode temporär gespeichert und man guckt nach dem nächsten. Existiert ein Schlüssel noch nicht, so wird ein entsprechender TTreeNode erzeugt. Dabei fällt mir auf, dass man das vielleicht besser per Rekursion lösen könnte, anstatt mit Schleife und dyn. Array. Obwohl es sich hier nicht viel nehmen sollte, denke ich.

Und zu den Werten: Das '@' steht immer für den Standardwert. Ansonsten stehen alle Schlüsselnamen in Anführungszeichen. Danach kommt das '='. Steht nun ein '"', so ist es ein normaler String. Steht da DWORD, so ist es ein selbiger. steht da 'hex:', dann ist es ein Hexadezimalwert. Steht 'hex(7):', dann ist es ein Multiline-String (stichwort TMemo) und bei 'hex(2):' diese Extended-Zeichenkette (ich vermute mal, die lässt einfach größere Längen zu, als das "normale" REG_SZ). Wichtig ist bei den Hexen, dass die durch Komma getrennt sind und am Ende der Zeile ein ',\' steht.

So, daraus sollte sich eigentlich (mehr oder weniger) einfach was zusammenschneidern lassen. Ich denke n bisschen Tipparbeit wirste bei den Hex-Zeugs haben, aber ansonsten gehts scho, denn im Prinzip is das doch alles bloß Str_Replace-Arbeit.

mfg, mh166
Tiefgründige Sätze unserer Zeit:
Zitat von Luckie:
Und diesen Token zur Laufzeit zu modifizieren würde bedeuten, dass du zur laufzeit das Token ändern musst.
  Mit Zitat antworten Zitat