function RegCopyKey(const SourceRootKey: Integer; const SourceSubKeyName: String; const TargetRootKey: Integer; const TargetSubKeyName: String): Boolean; var Keys: TArrayOfString; Names: TArrayOfString; Value: string; I: Integer; S: String; begin Result := False; if RegGetValueNames(SourceRootKey, SourceSubKeyName, Names) then begin for I := 0 to GetArrayLength(Names)-1 do begin if RegQueryStringValue(SourceRootKey, SourceSubKeyName, Names[I], Value) then RegWriteStringValue(TargetRootKey, TargetSubKeyName, Names[I], Value); end; end; if RegGetSubkeyNames(SourceRootKey, SourceSubKeyName, Keys) then begin for I := 0 to GetArrayLength(Keys)-1 do Result := RegCopyKey(SourceRootKey, SourceSubKeyName + '\' + Keys[I], TargetRootKey, TargetSubKeyName + '\' + Keys[I]) or Result; end else begin Result := False; end; end;