線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1276
推到 Plurk!
推到 Facebook!

請教該如何備份整個Registry

尚未結案
lordlost
一般會員


發表:2
回覆:1
積分:0
註冊:2003-08-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-27 15:21:46 IP:211.72.xxx.xxx 未訂閱
初學Delphi,不知該如何處理備份整個Registry檔,請教各位先進該如何在程式中可以讓User去備份登錄檔並指定備份檔名?謝謝!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-27 17:20:39 IP:202.39.xxx.xxx 未訂閱
...backup a branch of the registry? http://www.swissdelphicenter.ch/torry/showcode.php?id=1330
unit RegExpo;     interface     uses 
  Windows, rRegistry, Classes, SysUtils;     {$I-} 
{$LONGSTRINGS ON}     { 
  Regexpo       Author : Arthur Hoornweg (arthur.hoornweg@email.de) 
  Version : 1.00, May 1998 
  O/S : Windows 95, 98, ME, NT, 2000, XP 
        Delphi 2  
  Function : 
    This unit allows you to backup a branch of the registry into a *.REG file, 
    that is compatible with "regedit". 
    Double-clicking such a file in the explorer will import it.       Example: 
    ExportRegistryBranch(HKEY_LOCAL_MACHINE,'SOFTWARE\Borland\Delphi','A:\DELPHI.REG')       (c) 1998 A.M. Hoornweg. All rights reserved.       You may use this software for all purposes, both commercial and 
  noncommercial, as long as proper credit is given. The sourcecode may be distributed 
  freely, as long as this copyright is included and no more than a marginal fee is 
  asked.       Disclaimer:       I accept no responsibility whatsoever for any damages caused by these 
  routines. Use them at your own risk. If you find any bugs, please let me know. 
}     procedure ExportRegistryBranch(Rootsection: Integer; regroot: string; 
  FileName: string);     implementation     function dblBackSlash(t: string): string; 
var 
  k: longint; 
begin 
  Result := t; {Strings are not allowed to have} 
  for k := Length(t) downto 1 do {single backslashes} 
    if Result[k] = '\' then Insert('\', Result, k); 
end;     procedure ExportRegistryBranch(rootsection: Integer; Regroot: string; 
  FileName: string); 
var 
  reg: TRegistry; 
  f: Textfile; 
  p: PChar;       procedure ProcessBranch(root: string); {recursive sub-procedure} 
  var 
    values, keys: TStringList; 
    i, j, k: longint; 
    s, t: string; {longstrings are on the heap, not on the stack!} 
  begin 
    Writeln(f); {write blank line} 
    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   ']'); {write section name in brackets}         reg.OpenKey(root, False); 
    try 
      values := TStringList.Create; 
      try 
        keys := TStringList.Create; 
        try 
          reg.GetValuenames(values); {get all value names} 
          reg.GetKeynames(keys); {get all sub-branches}               for i := 0 to values.Count - 1 do {write all the values first} 
          begin 
            s := values[i]; 
            t := s; {s=value name} 
            if s = '' then s := '@' {empty means "default value", write as @} 
            else 
              s := '"'   s   '"'; {else put in quotes} 
            Write(f, dblbackslash(s)   '='); {write the name of the key to the file}                 case reg.Getdatatype(t) of {What type of data is it?}                   rdString, rdExpandString: {String-type} 
                Writeln(f, '"'   dblbackslash(reg.ReadString(t)   '"'));                   rdInteger: {32-bit unsigned long integer} 
                Writeln(f, 'dword:'   IntToHex(reg.readinteger(t), 8));                  {write an array of hex bytes if data is "binary." Perform a line feed 
              after approx. 25 numbers so the line length stays within limits}                   rdBinary: 
                begin 
                  Write(f, 'hex:'); 
                  j := reg.GetDataSize(t); {determine size} 
                  GetMem(p, j); {Allocate memory} 
                  reg.ReadBinaryData(t, p^, J); {read in the data, treat as pchar} 
                  for k := 0 to j - 1 do 
                  begin 
                    Write(f, IntToHex(Byte(p[k]), 2)); {Write byte as hex} 
                    if k <> j - 1 then {not yet last byte?} 
                    begin 
                      Write(f, ','); {then write Comma} 
                      if (k > 0) and ((k mod 25) = 0) {line too long?} then 
                        Writeln(f, '\'); {then write Backslash  lf} 
                    end; {if} 
                  end; {for} 
                  FreeMem(p, j); {free the memory} 
                  Writeln(f); {Linefeed} 
                end; 
              else 
                Writeln(f, '""'); {write an empty string if datatype illegal/unknown} 
            end;{case} 
          end; {for} 
        finally 
          reg.CloseKey; 
        end;           finally 
        {value names all done, no longer needed} 
        values.Free; 
      end;           {Now al values are written, we process all subkeys} 
      {Perform this process RECURSIVELY...} 
      for i := 0 to keys.Count - 1 do 
        ProcessBranch(root   '\'   keys[i]); 
    finally 
      keys.Free; {this branch is ready} 
    end; 
  end; { ProcessBranch}     begin 
  if RegRoot[Length(Regroot)] = '\' then {No trailing backslash} 
    SetLength(regroot, Length(Regroot) - 1); 
  Assignfile(f, FileName); {create a text file} 
  Rewrite(f); 
  if ioResult <> 0 then Exit; 
  Writeln(f, 'REGEDIT4'); {"magic key" for regedit}       reg := TRegistry.Create; 
  try 
    reg.Rootkey := Rootsection; 
    {Call the function that writes the branch and all subbranches} 
    ProcessBranch(Regroot); 
  finally 
    reg.Free; {ready} 
    Close(f); 
  end; 
end;     end. 
系統時間:2024-05-04 8:22:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!