![]() |
Registrykomponente gesucht
Hallo,
ich suche eine Registrykomponente, mit der ich Registryzweige extrahieren kann. Das Delphi-eigene TRegistry bietet zwar eine Möglichkeit an, eine Hive-Datei zu erstellen. Ich benötige jedoch die Daten in einem lesbaren Format, so wie der Registryeditor die Daten schreibt, wenn man beim Export das Format "Win9x-/NT4-Registrierungsdateien" wählt. Achso, die Komponente sollte auch D2009 (unicode) kompatibel sein. Besten Dank für jeden Tipp. |
Re: Registrykomponente gesucht
Suchst du so was:
![]() |
Re: Registrykomponente gesucht
Hallo Luckie,
besten Dank für Deine Antwort. Ich habe jetzt meine IDE nicht vor mir (schreibe von unterwegs). Ist der Code von Dir? Er kommt mir recht kurz vor :-D Erhalte ich da wirklich das Ergebnis wie beim genannten Registryexport? Auf alle Fälle werde ich es mir nachher gleich einmal anschauen, ob es genau das ist, was ich suche. Wichtig ist für mich, dass die Registryauszüge lesbar sein müssen. |
Re: Registrykomponente gesucht
Nope, ist von Nico, steht doch auch drunter. Und ich meine, es käme eine Texdatei dabei raus. Bin mir aber nicht mehr ganz sicher. Musst du einfach mal ausprobieren.
|
Re: Registrykomponente gesucht
Leider ist es so, wie ich es befürchtet habe. Die Funktion erstellt
eine nicht lesbare Datei, die nicht dem Registryexport entspricht. Gibt es noch andere Möglichkeiten? |
Re: Registrykomponente gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
lg. Astat |
Re: Registrykomponente gesucht
Hallo Astat,
besten Dank für die Unit. Auf den ersten Blick sieht alles gut aus. Nur habe ich gesehen, dass die Unit den Registrytypen REG_EXPAND_SZ (hex(2):) nicht kennt und daraus einen einfachen Typen, also REG_SZ macht. |
Re: Registrykomponente gesucht
Zitat:
Solltest dann auch gleich REG_EXPAND_SZ nachziehen. Wäre natürlich nett, wenn Du uns danach die Änderungen zukommen lassen würdest. Sollte irgendwo größere Probleme auftreten meld dich wieder. lg. Astat |
Re: Registrykomponente gesucht
Wie wäre es einfach mittels ShellExecute Reg.EXE mit den passenden Parametern aufzurufen?
Delphi-Quellcode:
Das erzeugt eine lesbare *.REG Datei und passt auch dann wenn sich irgendwelche registryinternen Dinge in Zukunft ändern sollten.
C:\>REG EXPORT /?
REG EXPORT Schlüssel Datei[/y] Schlüssel STAMMSCHLÜSSEL[\Unterschlüssel] (nur lokaler Computer). STAMMSCHLÜSSEL [ HKLM | HKCU | HKCR | HKU | HKCC ] Unterschlüssel Vollst. Name eines Registrierungsschlüssels unter dem STAMMSCHLÜSSEL. Datei Name der zu exportierenden Datenträgerdatei.. /y Erzwingt das Überschreiben der vorhandenen Datei ohne Aufforderung. Beispiele: REG EXPORT HKLM\Software\MyCo\MyApp AppBkUp.reg Exportiert alle untergeordnete Schlüssel und Werte des Schlüssels MyApp in die Datei AppBkUp.reg Ciao, Ralf |
Re: Registrykomponente gesucht
@Alfi001:
Das ist natürlich auch eine Variante. Aber gibt es denn nicht Probleme bei Anwendern mit beschränkten Zugriffsrechten? Das möchte ich natürlich ausschließen. |
Re: Registrykomponente gesucht
Es könnte natürlich Probleme geben wenn man auf Teile der Registry zugreifen will auf die der aktuelle Benutzer keinen Zugriff hat. Das habe ich noch nie ausprobiert. Ich verwende diese Methode in einigen Programmen um Backups von einigen Registryzweigen zu machen (Konfiguration eigener Programme). Bisher hatte ich noch keine Probleme, allerdings waren die entsprechenden Stellen der Registry für die Benutzer auch nicht eingeschränkt.
Probiers doch einfach mal aus :wink: |
Re: Registrykomponente gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
![]() Ich habe dann doch noch einen anderen Registryexport ausfindig machen können, die beim Auslesen der Datentypen einen anderen Weg geht, nämlich über die windows.pas Code unter: ![]() Ich habe hauptsächlich in der Funktion ExportProc() Änderungen vorgenommen. (siehe Anhang) Was mich ein wenig stört, ist dieser Part:
Delphi-Quellcode:
Ich muss unter Delphi 2009 wegen der Behandlung von Strings als Unicode, die Datenlänge halbieren und mit der Funktion WideCharToHexStr() die Unicode-Daten entsprechend in HEX umwandeln.
REG_BINARY :
begin st_datatype := 'hex:'; st := st_valuename + st_datatype; dataLen := Round(dataLen / 2); for j := 0 to dataLen - 1 do begin st_part := LowerCase(WideCharToHexStr(PChar (data) [j])); if j < dataLen - 1 then st_part := st_part + ','; st := CheckLineLength(st, st_part); If (st[length(st)] = '\') then Delete(st, length(st), 1); end; end;
Delphi-Quellcode:
Geht das nicht einfacher und kann ich das Halbieren der Datenlänge für die for-Schleife ändern? Es ist ja fehleranfällig, da es auch ungerade Datenlängen gibt, ich dann aber so immer noch ein Byte 00 zusätzlich erhalte...
// Unicode in Hex-Format wandeln für Reg_binary
function WideCharToHexStr(Value: Char): string; var Ch : Char; code : String; begin code := IntToHex(Ord(Value), 4); if Ch = #0 then code := IntToHex(Ord(Value), 4); // swapBytes Result := code[3]+code[4]+','+code[1]+code[2]; end; |
Re: Registrykomponente gesucht
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich habe noch ein wenig dran geschraubt und bin auch der Halbierung von Datenlängen aus dem Weg gegangen.
Die Tests vom Abbild meiner Registry ergaben nur minimale Abweichungen, wie zusätzliche Leerzeilen, etc. Die Unit ist D2009 kompatibel. Die Funktionen werden wie in der Registry.pas aufgerufen. Ansonsten werden folgende Datentypen unterstützt: REG_NONE REG_DWORD REG_BINARY REG_SZ REG_MULTI_SZ REG_EXPAND_SZ 11 (QWORD) 188 (keine offizielle Bezeichnung gefunden) Andere sind mir bisher nicht untergekommen. Feedbacks und Hinweise sind willkommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz