Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Windows Registry Datei als text Laden??? (https://www.delphipraxis.net/46140-windows-registry-datei-als-text-laden.html)

Jonny5K 19. Mai 2005 13:22


Windows Registry Datei als text Laden???
 
Hallo Leute,

ich habe folgendes Problem, ich möchte über eine funktion an zwei verschiedenen Stellen in der Registry ein paar Schlüssel exportieren und diese danach zusammen in eine Datei schreiben, damit man mit einem klick alle Schlüssel wieder importieren kann.

Das exportieren der einzelnen Schlüssel habe ich schon hinbekommen, jedoch weiß ich nicht wie ich nun die beiden *.Reg Dateien zusammen bringen soll.

Ich wollte es mit TStringlist machen, jedoch kann ich die *.Reg Dateien nicht einfach mit
Stringlist1.LoadFromFile(...\export1.Reg);
in eine Stringlist laden, da eine Registry Datei keine normale Textdatei ist!!!

Nun die Frage: Weiß jemand wie ich eine Registry Datei in z.B. eine Stringlist (oder ähnliches) geladen bekomme?

Danke schon mal im vorraus. http://www.delphipraxis.net/posting.php?mode=iframe
Smile

Steve 19. Mai 2005 13:33

Re: Windows Registry Datei als text Laden???
 
Hi,

erstmal Herzlich Willkommen in der Delphi-PRAXiS :party: :dp:


Zum Thema: eine REG-Datei ist durchaus eine ganz simple Textdatei:
Code:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\...]
"xyz"="wert"
...
Das wäre mal so der typische Aufbau bzw. Inhalt einer *.reg-Datei...

Kannst sie also auch in eine StringList laden :)
Ne genaue Beschreibung der REG-Dateien findest Du unter www.wotsit.org

....Das stimmt so nicht ganz :oops: --->> Obiges gilt nur fürs Win9x/NT4
-Reg-Format!! Hier werden noch ANSI-Strings benutzt, bei den aktuellen Versionen weren Widestrings benutzt! (s.u.)


Gruß
Stephan :dance:

edit: Tippfehler ohne Ende :cyclops:

shmia 19. Mai 2005 13:48

Re: Windows Registry Datei als text Laden???
 
Zitat:

Zitat von Jonny5K
Ich wollte es mit TStringlist machen, jedoch kann ich die *.Reg Dateien nicht einfach mit
Stringlist1.LoadFromFile(...\export1.Reg);
in eine Stringlist laden, da eine Registry Datei keine normale Textdatei ist!!!

Die *.Reg Dateien werden als WideStrings / Unicode gespeichert.
In der Unit JclWideStrings aus der JCL gibt es die Klasse TWStringList.
Damit lässt sich wie mit einer TStringList arbeiten.
Diese Klasse kann auch mit dem 1. Wort der Datei richtig umgehen.
Delphi-Quellcode:
const
  BOM_LSB_FIRST = WideChar($FEFF);
  BOM_MSB_FIRST = WideChar($FFFE);
Wenn die Datei mit BOM_MSB_FIRST beginnt, dann werden alle Widechars in der Byteanordnung gedreht.

Jonny5K 19. Mai 2005 13:51

Re: Windows Registry Datei als text Laden???
 
Hiho,

@Steve:
danke für die schnelle antwort.
Aber wenn ich versuche die reg-Datei in eine Stringlist zu laden

Code:
Stringlist1.LoadFromFile(...\export1.Reg);
Habe ich in meiner Stringlist nur einen Eintrag und dieser ist 'ÿþW'
ich habe die Reg-Datei auch mal mit dem Editor geöffnet und da sind (logischer weise) viel mehr Einträge.
Zudem habe ich auch mal von hand eine *.txt Datei erstellt und diese mit LoadFromFile in eine Stringlist geladen, dass hat Problemlos funktioniert.

barf00s 19. Mai 2005 13:58

Re: Windows Registry Datei als text Laden???
 
er hats dir doch grad erklärt, das regedit die .reg files im UNICODE format speichert.
also musst du die auch mitner unicodefähigen stringlist laden - TWStringlist oder wie die klasse eben hies ein posting über mir

was auch gehen sollte

Delphi-Quellcode:
function LoadRegFile(const sFileName: string; var xStringlist: TStringlist): boolean;
var
  xMS: TMemoryStream;
  sBuf: PWideChar;

begin
  Result := False;
  if not FileExists(sFileName) then
    Exit;
  xMS := TMemoryStream.Create;
  xMS.LoadFromFile(sFileName);
  GetMem(sBuf, xMS.Size);
  xMS.Read(sBuf, xMS.Size);
  xStringlist.Text := WideCharToString(sBuf);
  FreeMem(sBuf, xMS.Size);
  FreeAndNil(xMS);
  Result := True;
end;

var
  xSL: TStringlist;

begin
  xSL := TStringlist.Create;
  if LoadRegFile('c:\blah.reg', xSL) then begin
    // ...
    FreeAndNil(xSL);
  end;
end;
is aber ungetestet :)

bigg 19. Mai 2005 14:06

Re: Windows Registry Datei als text Laden???
 
Zitat:

Zitat von shmia
Die *.Reg Dateien werden als WideStrings / Unicode gespeichert.



Kommt ganz drauf an, wie man die Reg-Datei exportiert hat.
Es muss nicht zwingend Unicode sein.

barf00s 19. Mai 2005 14:25

Re: Windows Registry Datei als text Laden???
 
aufnem win2k/xp schon, es sei denn man wählt win9x/nt4 ....

wie auch immer, das lässt sich ja alles herausfinden

Jonny5K 19. Mai 2005 15:33

Re: Windows Registry Datei als text Laden???
 
Hallo,
habe es jetzt versucht mit barf00s Quellcode, bekomme dort aber immer eine Zugriffsverletzung an der Stelle

Delphi-Quellcode:
xMS.Read(sBuf, xMS.Size);
Greetz Jonny5K

Christian Seehase 19. Mai 2005 19:30

Re: Windows Registry Datei als text Laden???
 
Moin Jonny,

wenn ich das richtig sehe fehlt da ein ^

Also:

Code:
xMS.Read(sBuf[color=red][b]^[/b][/color], xMS.Size);

Jonny5K 19. Mai 2005 21:41

Re: Windows Registry Datei als text Laden???
 
Hiho,

hab das gerade mal probiert und jetzt gehts http://www.delphipraxis.net/posting.php?mode=iframe
Laughing.
Damit wäre ich auch soweit zufrieden *g*, nur noch eine andere Frage hätte ich jetzt. Ist das
Delphi-Quellcode:
sBuf^
in
Delphi-Quellcode:
xMS.Read(sBuf^, xMS.Size);
jetzt eine Art Zeiger?

Danke an alle dir mir geholfen haben :-)

Greetz Jonny5K


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz