Показать сообщение отдельно
  #5  
Старый 06.01.2013, 18:42
UFO 007 UFO 007 вне форума
Новичок
 
Регистрация: 28.11.2010
Сообщения: 54
Репутация: 10
По умолчанию

Огромное всем спибо!!! (понимаю - все празднуют/отдыхают...) А где тут кнопочка [Решено]?
Как оказалось - целый кобель (а не собака) зарыт в самой среде разработки. Хватило движок от 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", то в ТЕдит (мне) он крякозябры вывел - ну не дружит он с Юникодом...

Заранее благодарен
__________________
...И был сначала ZX-Spectrum, а потом его T(urbo)ASS(e)M(bler)... И только на 7-й день (когда Интел купила Пентковского [из КБ Бабаяна]) - появился Pentium-I... А в Союзе P-II был ещё в 1978 году (точнее: Эльбрус [мультискалярный проц] только не рапространялся спекулянтами, а управлял ракетами и спутниками)... А лет с пяток назад Эльбрус-II ПЁР (но никак не ГНАЛСЯ как Селероны) на F(recuency):= 400 GHz... А самое парадоксальное - презентация состоялась в Минске...
Ответить с цитированием