Огромное всем спибо!!! (понимаю - все празднуют/отдыхают...) А где тут кнопочка [Решено]?
Как оказалось - целый кобель (а не собака) зарыт в самой среде разработки. Хватило движок от RegistryChecker_а приблизительно следующего содержания:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
TS: TStrings;
begin
TS:= TStringList.Create;
Reg:= TRegistry.Create;
If FileExists(GetEnvironmentVariable('SYSTEMDRIVE')+'\SSD_User.dat') Then
TS.LoadFromFile(GetEnvironmentVariable('SYSTEMDRIVE')+'\SSD_User.dat');
Old:= TS.Strings[0];// C:\Documents and Settings
New:= TS.Strings[1];//E:\Профиль UFO 007(miniXP)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Reg.RootKey:= HKEY_CLASSES_ROOT;
Form1.Memo1.Lines.Add('HKEY_CLASSES_ROOT');
Scan('', Old);
MessageBox('Готово!', 'Сообщение', MB_ICONQUESTION + MB_YESNO);
end;
procedure TForm1.Scan(Key, Search: string);
var
TSVal, TSKey: TStringList;
I: Integer;
begin
Inc(Total);
TotalEdit.Text:=inttostr(Total);
Application.ProcessMessages;
if Reg.OpenKey(Key, False) then //открываем ключ
try
TSVal := TStringList.Create;
TSKey := TStringList.Create;
try
Reg.GetValueNames(TSVal);//получаем список параметров ключа
for I := 0 to TSVal.Count - 1 do// и просматриваем их
begin
//Form1.Memo2.Lines.Add('RegKey= '+Key);
if Reg.GetDataType(TSVal.Strings[i]) in [rdString, rdExpandString] then
If Pos(AnsiUpperCase(Old), AnsiUpperCase(Reg.ReadString(TSVal.Strings[i])))>0
Then //значение параметра ключа
begin
Inc(Found);
Form1.FoundEdit.Text:= inttostr(Found);
if Reg.GetDataType(TSVal.Strings[i]) in [rdExpandString] then
begin
Form1.Memo1.Lines.Add(' rdExpandString');
Form1.Memo1.Lines.Add('RegKey= '+Key);
Form1.Memo1.Lines.Add('Parametr= '+TSVal.Strings[i]);
Form1.Memo1.Lines.Add('OldData= '+Reg.ReadString(TSVal.Strings[i]));
// RegValChange(Key, TSVal.Strings[i], New, True);
end Else
begin
Form1.Memo1.Lines.Add(' rdString');
Form1.Memo1.Lines.Add('RegKey= '+Key);
Form1.Memo1.Lines.Add('Parametr= '+TSVal.Strings[i]);
Form1.Memo1.Lines.Add('OldData= '+Reg.ReadString(TSVal.Strings[i]));
// RegValChange(Key, TSVal.Strings[i], New, False);
end;
end;
TSKey.Clear;
end;
TSKey.Clear;
Reg.GetKeyNames(TSKey);
for I := 0 to TSKey.Count - 1 do
if TSKey.Strings[i] <> '' then
begin
if Reg.GetDataType('') in [rdString, rdExpandString] then//значение ключа
If Pos(AnsiUpperCase(Old), AnsiUpperCase(Reg.ReadString('')))>0
Then
begin
Inc(Found);
Form1.FoundEdit.Text:= inttostr(Found);
if Reg.GetDataType('') in [rdExpandString] then
begin
Form1.Memo1.Lines.Add(' rdExpandString');
Form1.Memo1.Lines.Add('RegKey= '+Key);
Form1.Memo1.Lines.Add('SubKey''= '+TSKey.Strings[i]);
Form1.Memo1.Lines.Add('OldData= '+Reg.ReadString(''));
// RegValChange(Key, '', New, True);
end Else
begin
Form1.Memo1.Lines.Add(' rdString');
Form1.Memo1.Lines.Add('RegKey= '+Key);
Form1.Memo1.Lines.Add('SubKey''= '+TSKey.Strings[i]);
Form1.Memo1.Lines.Add('OldData= '+Reg.ReadString(''));
// RegValChange(Key, '', New, False);
end;
end;
Scan(Key + '\' + TSKey.Strings[i], Old);
end;
finally
TSVal.Free;
TSKey.Free;
end;
finally
Reg.CloseKey;
end;
end;
собрать/откомпилить не под delphi32.exe (что с постфиксом *32 в таскманагере) а под лазарем (что без оного) и проект1.ехе вывел в ФаундЕдит то же число - сколько раз потребовалось нажать Ф3 в регедите при поиске того же текста в той же ветке пока в тексте статусбара не появился фрагмент "HKEY_CURRENT_USER". Вывод:= Лазарю 5 с плюсом (но только за сборку/компиляцию).
Люди добрыи-и-и!!! Да поможить за христарадь - обозначьте версию/сборку/модель/модификацию Delphi чтоб под 64-й ОСью отображалась без постфикса *32 (что нагуглил д7х64 - чушь собачья и баталия длится уже месяц) а Лазарь - мало того что тот же проект1.ехе 15 метров весит и ШелТриВью бледный, тусклый и тд (ну нету у него ШелИмиджа - диски без иконок и за ДрайвЛеттером метка диска отсутствует) так ещё и если у юзверя в параметре Персональ записано "Е:\Документы_х32", то в ТЕдит (мне) он крякозябры вывел - ну не дружит он с Юникодом...
Заранее благодарен