mam taki kodzik:
var
Reg: TRegistry;
StartTime: Cardinal;
function FixupPath(Key: string): string;
begin
if Key = '' then
Result := ''
else
if AnsiLastChar(Key) <> '' then
Result := Key + ''
else
Result := Key;
if Length(Result) > 1 then
if (Result[1] = '') and (Result[2] = '') then
Result := Copy(Result, 2, Length(Result));
end;
procedure SearchReplace(StartKey: String);
var
KeyNames, ValueNames: TStringList;
I: Integer;
Current, Changed: String;
begin
Application.ProcessMessages;
Reg.CloseKey;
Reg.OpenKey(FixupPath(StartKey), False);
ListBox1.Items.Add('Key:'+FixupPath(StartKey));
KeyNames:=TStringList.Create;
ValueNames:=TStringList.Create;
Reg.GetValueNames(ValueNames);
if not ValueNames.Count=0 then
begin
for I:=0 to ValueNames.Count-1 do
begin
if Reg.GetDataType(ValueNames.Strings[I])=rdString then
begin
Current:=Reg.ReadString(ValueNames.Strings[I]);
if Pos(AnsiUpperCase(
'C:\Documents and Settings\Hubert\Pulpit\Delphi'),
AnsiUpperCase(Current))<>0 then
begin
ListBox1.Items.Add('Value:'+ValueNames.Strings[I]);
Changed:=StringReplace(Current, 'C:\Documents and Settings\Hubert\Pulpit\Delphi',
'G:\Delphi', [rfReplaceAll, rfIgnoreCase]);
Reg.WriteString(ValueNames.Strings[I], Changed);
end;
end;
end;
end;
if Reg.HasSubKeys then
begin
Reg.GetKeyNames(KeyNames);
if not KeyNames.Count=0 then
begin
for I:=0 to KeyNames.Count do
begin
SearchReplace(FixupPath(StartKey)+FixupPath(KeyNames.Strings[I]));
end;
end;
end;
ValueNames.Free;
KeyNames.Free;
end;
begin
Reg:=Tregistry.Create;
StartTime:=GetTickCount;
Reg.RootKey:=HKEY_CURRENT_USER;
ListBox1.Items.Add('HKEY_CURRENT_USER:');
SearchReplace('');
Reg.RootKey:=HKEY_LOCAL_MACHINE;
ListBox1.Items.Add('HKEY_LOCAL_MACHINE:');
SearchReplace('');
Reg.RootKey:=HKEY_USERS;
ListBox1.Items.Add('HKEY_USERS:');
SearchReplace('');
ListBox1.Items.Add('Done after: '+IntToStr(StartTime-GetTickCount)+' msec!');
Application.MessageBox('Done','Reg Search & Replace', MB_OK);
end;
Kompiluje się toto pieknie, ale nie działa! z logów (ListBox1) wynika że skopane jest w głównym bloku i RootKey'e nie mają sub keyów, co jest oczywista bzdurą. i jak tu teraz zrobic żeby działało?