procedure RegCopyKey(const SourceRootKey: Integer; const SourceSubKeyName: String; const TargetRootKey: Integer; const TargetSubKeyName: String; const Level: Integer);
var
Keys: TArrayOfString;
Names: TArrayOfString;
Value: string;
I: Integer;
begin
if Level > 8 then Exit;
if RegGetValueNames(SourceRootKey, SourceSubKeyName, Names) then
for I := 0 to GetArrayLength(Names)-1 do
if RegQueryStringValue(SourceRootKey, SourceSubKeyName, Names[I], Value) then
RegWriteStringValue(TargetRootKey, TargetSubKeyName, Names[I], Value);
if RegGetSubkeyNames(SourceRootKey, SourceSubKeyName, Keys) then
for I := 0 to GetArrayLength(Keys)-1 do
RegCopyKey(SourceRootKey, SourceSubKeyName + '\' + Keys[I], TargetRootKey, TargetSubKeyName + '\' + Keys[I], Level+1);
end;