请问如何将注册表中某个键中的所有内容导入到C;\1.reg中,实现的功能就如同用鼠标选中某个key后(注意是左边的某个key,不是右边的某个value),点击菜单的导出功能

解决方案 »

  1.   

    TRegistry.SaveKey(KeyName,FileName);
    成功返回True,否则返回False.
      

  2.   

    就是例如将hkey_current_user\software\odbc这项导出到1.reg中去
      

  3.   

    同 victor_yang(victoryang) 。
      

  4.   

    我不知道是我的系统有问题,还是Delphi有问题,试着用key.Savekey后老是给我生成一个空文件。
    所以我为楼主推荐另一种方法:
    var
      RunFile:string;
    begin
      RunFile:='Regedit /E C:\1.reg HKEY_CURRENT_USER\Software\ODBC';
      WinExec(pchar(RunFile),SW_HIDE);
    end;
    或者你也可以用API:RegSaveKey试试
      

  5.   

    请问我这段代码为什么不能实现这个功能  
        Reg:=TRegistry.Create;
        Reg.rootkey:=HKEY_CURRENT_USER;
        Reg.savekey('software\odbc','c:\1.reg')
      

  6.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vKey:String;
    begin
      vKey:='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run';
      WinExec(PChar(format('Regedit /E C:\a.reg %s',[vKey])),SW_HIDE);
    end;//以上经过测试Regedit的运行参数
    REGEDIT [/L:system] [/R:user] filename1
    REGEDIT [/L:system] [/R:user] /C filename2
    REGEDIT [/L:system] [/R:user] /E filename3 [regpath]  /L:system        Specifies the location of the SYSTEM.DAT file.
      /R:user          Specifies the location of the USER.DAT file.
      filename1        Specifies the file(s) to import into the regist
      /C filename2     Specifies the file to create the registry from.
      /E filename3     Specifies the file to export the registry to.
      regpath  Specifies the starting registry key to export from.
                      (Defaults to exporting the entire registry).
      /S  (Windows) Silent - no message on completion.
      

  7.   

    还有一个问题请教,我如果注册表路径里多了个空格就导不出去了
    如:HKEY_CURRENT_USER\Software\silver pacs,请注意这里silver pacs多了个空格,就导不出去了,
    请问如何解决
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      vKey:String;
    begin
      vKey:='HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\';
      WinExec(PChar(format('Regedit /E C:\a.reg "%s"',[vKey])),SW_HIDE); //加双引号
    end;//
      

  9.   

    var
      RunFile:string;
    begin
      RunFile:='Regedit /E C:\1.reg "HKEY_CURRENT_USER\Software\silver pacs"';
      WinExec(pchar(RunFile),SW_HIDE);
    end;
      

  10.   

    如何把注册表转换成一个.reg文件?
    请参考下面的单元:
    用法:
      ExportRegistryToFile(HKEY_CURRENT_USER,'SoftWare\Borland','C:\aaaa.reg');
    ///FileName:RegExport.pas
    unit RegExport;interface
    uses
      windows, registry, Classes, sysutils;procedure ExportRegistryToFile(const Root: HKEY; const Key: string; const FileName: TFileName);implementationfunction DBLBackSlash(T: string): string;
    ///本函数用来把一个'\'变成两个'\\',符合REG文件格式
    var
      K                 : Longint;
    begin
      Result := T;
      for K := Length(T) downto 1 do
        if Result[k] = '\' then insert('\', Result, K);
    end;{$I-}procedure ExportRegistryToFile(const Root: HKEY; const Key: string; const FileName: TFileName);
    var
      Reg               : TRegistry;
      F                 : TextFile;
      p                 : PChar;
      FKey              : string;  procedure ProcessBranch(R: string); ///递归处理子键
      var
        Values, Keys    : TStringList;
        i, j, k         : longint;
        s, t            : string;
      begin
        WriteLn(F);
        case Root 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 + '\' + R + ']'); ///like [HKEY_CURRENT_USER\....\....\]
        Reg.CloseKey;
        Reg.OpenKey(R, False);
        Values := TStringList.Create;
        Keys := TStringList.Create;
        Reg.GetValueNames(Values);
        Reg.GetKeyNames(Keys);
        for i := 0 to Values.Count - 1 do
        begin
          s := Values.Strings[i];
          t := s;
          if s = '' then s := '@' else s := '"' + s + '"';
          Write(F, DBLBackSlash(s) + '=');
          case Reg.GetDataType(t) of
            rdString, rdExpandString: Writeln(F, '"' + DBLBackSlash(Reg.ReadString(t)) + '"');
            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 if K<>j-1
                end; ///For
                FreeMem(p, j);
                WriteLn(F);
              end;
          else ///case else
            WriteLn(F, '""'); ///数据非法!
          end; /// End Case
        end; ///end For
        Reg.CloseKey;
        Values.Free;
        for i := 0 to Keys.Count - 1 do
          if R <> '' then
            ProcessBranch(R + '\' + Keys.Strings[i])
          else
            ProcessBranch(Keys[i]);
        Keys.Free;
      end;begin
      FKey := Key;
      if FKey <> '' then
        if Key[Length(FKey)] = '\' then
          SetLength(FKey, Length(FKey) - 1);
      AssignFile(F, FileName);
      ReWrite(F);
      if IOResult <> 0 then exit;
      WriteLn(F, 'REGEDIT4');
      Reg := TRegistry.Create;
      try
        Reg.RootKey := Root;
        ProcessBranch(FKey);
      finally
        Reg.Free;
        Close(F);
      end;
    end;
    {$I+}end.
      

  11.   

    感谢 victor_yang(victoryang) ,Kevin_Lmx(繁华阅尽) 稍后给分