Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Schlüssel mit allen Subkeys exportieren? (https://www.delphipraxis.net/81664-schluessel-mit-allen-subkeys-exportieren.html)

mlspider 1. Dez 2006 07:31


Schlüssel mit allen Subkeys exportieren?
 
Ich versuche vergeblich den Schlüssel "Schemes" aus HKEY_CURRENT_USER\AppEvents mit allen Subkeys zu exportieren. Dazu verwende ich die von Luckie erstellte Funktion.


Zum Thread

Leider steht in der Hive-Datei nur Müll drin. Gibt es eine Möglichkeit, direkt als Reg-Datei zu exportieren?
Lässt sich eigentlich diese Funktion auch für den Import portieren?

Luckie 1. Dez 2006 08:07

Re: Shlüssel mit allen Subkeys exportieren?
 
Was heißt nur MÜll? Die Daten sind binär. Willst du sie in lesbarer Form im reg-Format, wird dir nichts anderes übrig bleiben, als die entsprechende Datei von Hand zu erstellen. Was natürlich auch bedeutet, dass du jeden Schlüssel rekursiv durchsuchen musst und jeden Wert einzeln schreiben musst. Wie so eine reg-Datei aufgebaut ist kannst du ja selber rausfinden.

mlspider 1. Dez 2006 08:09

Re: Shlüssel mit allen Subkeys exportieren?
 
Das muß nun wirklich nicht sein. Danke Luckie.

Sunlight7 1. Dez 2006 08:19

Re: Shlüssel mit allen Subkeys exportieren?
 
Moin!

Ähm, schon mal die Exportfunktion vom Regeditor gesehen?

mlspider 1. Dez 2006 09:34

Re: Shlüssel mit allen Subkeys exportieren?
 
@ Sunlight7,

Die Export- bzw. Importfunktion im Editor ist mir sehr wohl bekannt. Nur kann ich vom jeweiligen Benutzer meines Programms nicht verlangen, Änderungen in der Registerdatenbank von Windows vorzunehmen.

Luckie 1. Dez 2006 09:36

Re: Shlüssel mit allen Subkeys exportieren?
 
Man kann den Editor aber mit Paramtern reg-Dateien importieren und exportieren lassen. Ich denke das meine unser Sonnenschein. ;)

KLS 1. Dez 2006 09:49

Re: Shlüssel mit allen Subkeys exportieren?
 
irgendwo hab ich mal folgendes aufgeschnappt. und ich denke das is genau das was du suchst.

Delphi-Quellcode:
procedure ExportRegistryBranch(rootsection : cardinal; Regroot,FileName : string);
var
  reg : TRegistry;
  f : Textfile;
  p : PChar;

  procedure ProcessBranch(root : string);
  var
    values,keys : TStringList;
    i,j,k : longint;
    s,t : string;
  begin
    Writeln(f);
    case rootsection of
      HKEY_CLASSES_ROOT : s := 'HKEY_CLASSES_ROOT';
      HKEY_CURRENT_USER : s := 'HKEY_CURRENT_USER';
      HKEY_LOCAL_MACHINE : s := 'HKEY_LOCAL_MACHINE';
      HKEY_USERS : s := 'HKEY_USERS';
      HKEY_PERFORMANCE_DATA : s := 'HKEY_PERFORMANCE_DATA';
      HKEY_CURRENT_CONFIG : s := 'HKEY_CURRENT_CONFIG';
      HKEY_DYN_DATA : s := 'HKEY_DYN_DATA';
    end;
    Writeln(f,'[' + s + '\' + root + ']');
    reg.OpenKey(root,False);
    values := TStringList.Create;
    keys := TStringList.Create;
    reg.GetValuenames(values);
    reg.GetKeynames(keys);
    for i := 0 to values.Count - 1 do
    begin
      s := values[i];
      t := s;
      if s = '' then s := '@' else s := '"' + s + '"';
      Write(f,StringReplace(s,'\','\\',[rfReplaceAll]) + '=');
      case reg.Getdatatype(t) of
        rdString,rdExpandString : Writeln(f,'"' + StringReplace(reg.ReadString(t) + '"','\','\\',[rfReplaceAll]));
        rdInteger : Writeln(f,'dword:' + IntToHex(reg.readinteger(t),8));
        rdBinary : begin
                     Write(f,'hex:');
                     j := reg.GetDataSize(t);
                     GetMem(p,j);
                     reg.ReadBinaryData(t,p^,J);
                     for k := 0 to j - 1 do
                     begin
                       Write(f,IntToHex(Byte(p[k]),2));
                       if k <> j - 1 then
                       begin
                         Write(f,',');
                         if (k > 0) and ((k mod 25) = 0) then Writeln(f,'\');
                       end;
                     end;
                     FreeMem(p,j);
                     Writeln(f);
                   end;
              else Writeln(f, '""');
      end;
    end;
    reg.CloseKey;
    values.Free;
    for i := 0 to keys.Count - 1 do ProcessBranch(root + '\' + keys[i]);
    keys.Free;
  end;

begin
  if RegRoot[Length(Regroot)] = '\' then delete(Regroot,Length(Regroot),1);
  Assignfile(f,FileName);
  Rewrite(f);
  Writeln(f,'REGEDIT4');
  reg := TRegistry.Create;
  reg.Rootkey := Rootsection;
  ProcessBranch(Regroot);
  reg.Free;
  Close(f);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ExportRegistryBranch(HKEY_LOCAL_MACHINE,'HARDWARE','c:\test.reg');
end;

mlspider 1. Dez 2006 09:56

Re: Shlüssel mit allen Subkeys exportieren?
 
Eine Prozedur innerhalb einer Prozedur? Geht denn das in Ordnung?

Edit: Ja, es geht in Ordnung. Und wie könnte diese Datei wierder eingespielt werden? (Ohne Doppelklick, vielmehr aus einem Programm heraus.)

Luckie 1. Dez 2006 10:11

Re: Shlüssel mit allen Subkeys exportieren?
 
Zitat:

Zitat von mlspider
Eine Prozedur innerhalb einer Prozedur? Geht deenn das in Ordnung?

Jupp, tut es.

Sunlight7 1. Dez 2006 15:03

Re: Shlüssel mit allen Subkeys exportieren?
 
Zitat:

Zitat von Luckie
Man kann den Editor aber mit Paramtern reg-Dateien importieren und exportieren lassen. Ich denke das meine unser Sonnenschein. ;)

Wie haste das denn bloß wieder erraten? :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.

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