注册表转化成.REG文件

I

import

Unregistered / Unconfirmed
GUEST, unregistred user!
如何把注册表转换成一个.reg文件?
请参考下面的单元:
用法:
ExportRegistryToFile(HKEY_CURRENT_USER,'SoftWare','C:.reg');
///FileName:RegExport.pas
unit RegExport;
interface
uses
windows, registry, Classes, sysutils;
procedure ExportRegistryToFile(const Root: HKEY; const Key: string; const FileName: TFileName);
implementation
function 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;
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)
else
ProcessBranch(Keys);
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.
 

Similar threads

I
回复
0
查看
548
import
I
I
回复
0
查看
596
import
I
I
回复
0
查看
499
import
I
I
回复
0
查看
667
import
I
顶部