function registryWriteAGroup(iRootKey :HKEY; strKeyName : string; var flReg : TextFile) : integer;
var
Reg:TRegistry;
// keyInfo:TRegKeyInfo;
DataInfo:TRegDataInfo;
i:integer;
strRootKey:string;
stsKeyValue:TStringList;
begin
case iRootKey of
HKEY_CLASSES_ROOT: strRootKey:='HKEY_CLASSES_ROOT';
HKEY_CURRENT_USER: strRootKey:='HKEY_CURRENT_USER';
HKEY_LOCAL_MACHINE: strRootKey:='HKEY_LOCAL_MACHINE';
HKEY_USERS: strRootKey:='HKEY_USERS';
HKEY_PERFORMANCE_DATA: strRootKey:='HKEY_PERFORMANCE_DATA';
HKEY_CURRENT_CONFIG: strRootKey:='HKEY_CURRENT_CONFIG';
HKEY_DYN_DATA: strRootKey:='HKEY_DYN_DATA';
end;
try
writeln(flReg,''); // write a seperate line
Writeln(flReg,'['+strRootKey+strKeyName+']'); // write position information
except
result :=-1;
exit;
end;
Reg := TRegistry.Create;
stsKeyValue:=TStringList.Create;
result :=0;
try
// open key
Reg.RootKey:=iRootKey;
Reg.Access:=KEY_READ;
Reg.OpenKey(strKeyName,False);
// get values
Reg.GetValueNames(stsKeyValue);
for i:=0 to stsKeyValue.Count-1 Do begin
Reg.GetDataInfo(stsKeyValue.Strings[i],DataInfo);
case DataInfo.RegData of
rdString:
Writeln(flReg,'"'+stsKeyValue.Strings[i]+'"="'+
CStyleString(Reg.ReadString(stsKeyValue.Strings[i]))+'"');
rdExpandString:
Writeln(flReg,'"'+stsKeyValue.Strings[i]+'"="'+
CStyleString(Reg.ReadString(stsKeyValue.Strings[i]))+'"');
rdInteger:
Writeln(flReg,'"'+stsKeyValue.Strings[i]+'"=dword:'+
intToHex(Reg.ReadInteger(stsKeyValue.Strings[i]),8));
// other type are ignored
end;
end;
// get sub keys
Reg.GetKeyNames(stsKeyValue);
for i:=0 to stsKeyValue.Count-1 do begin
if registryWriteAGroup(iRootKey,
strKeyName +'\'+stsKeyValue.Strings[i],flReg) <>0 then
result :=-1;
end;