Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск ключа в regedit 
:(
    Опции темы
dimazu
Дата 2.2.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 4
Всего: 5



См. пост на один выше.  smile 
Работает без проблем....
PM MAIL   Вверх
RA
Дата 3.2.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 14
Всего: 115



Цитата(Витаминка @  31.1.2007,  20:20 Найти цитируемый пост)
RA насоветовал тут мне....
Без этого кода нельзя сделать проверку на Value, и он никак не лишний, лишь одно что  IsValidData лучше заменить на
Выделить всёкод Pascal/Delphi
1:
2:
    
if Pos('xxx',S.Strings[I]) >0 then
....



Твой вопрос "поиск ключа в regedit", я дал ссылку на сорс роуза, в ответ вижу кусок кода, я подумал что это кусок кода от роуза.
PM   Вверх
Витаминка
Дата 4.2.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 9.12.2006

Репутация: 1
Всего: 1



Спасибо большое за помощь smile  (шапки пора со смайлов убирать  smile  )
Но это  ещё не всё)) 
1) Почему value в реестре меняется только после 2ва запуска программы? 
2) Если перенести всё эта на консоль, то всё компилится без ошибок, но value не меняет...


PM MAIL   Вверх
dimazu
Дата 4.2.2007, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 4
Всего: 5



Если помнишь, я спрашивал почему менять надо именно в HKEY_USERS...
Dело в том, что там запись в регистре дублируется системой в HKEY_USERS\S-x-x-xx
и вхождений может быть много (два и больше).
Поскольку точный путь тебе неизвестен, а известно лишь имя переменной,
то в моем примере изменяются ВСЕ вхождения для 'xxxxx', найденные в реестре,
под HKEY_USERS, а их, как я и говорил, может быть несколько.

Т.е. если предположить, что переменная находится где-то в \.DEFAULT, то надо сделать проверку,
типа:
Код

var  Edited : boolean;
...
...

Procedure TForm1.MakeString(const AKey, AValue, AData: String);
begin
  Application.ProcessMessages;
  if AValue <> '' then
      if Pos(S_String, AValue) > 0 then
      begin
          tmpValue:=AKey;
          if Pos('.DEFAULT', tmpValue)>0 then
          begin
           if not Edited then WriteReg('9999');
           Edited:=True;
          end;
  end;


В процедуре Scan nаписать типа:
Код

...
    for I := 0 to S.Count - 1 do
      begin
        MakeString(Key, S.Strings[I], '');
        if FReg.GetDataType(S.Strings[I]) in [rdString, rdExpandString] then
        begin
          MakeString(Key, S.Strings[I], FReg.ReadString(S.Strings[I]));
          If Edited then Exit;
        end;
      end;
...    


I приравнять Edited:=False перед Scan

Это сообщение отредактировал(а) dimazu - 4.2.2007, 21:11
PM MAIL   Вверх
Витаминка
Дата 4.2.2007, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 9.12.2006

Репутация: 1
Всего: 1



dimazu чтоб я без тебя делала, спасиб! smile А с 2ым пунктом как быть?
PM MAIL   Вверх
dimazu
Дата 5.2.2007, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 4
Всего: 5



Извиняюсь, но не понял вопроса...  smile 
PM MAIL   Вверх
Витаминка
Дата 5.2.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 9.12.2006

Репутация: 1
Всего: 1



Цитата(dimazu @ 5.2.2007,  00:02)
Извиняюсь, но не понял вопроса...  smile

Если проект создать в Console Application(без окошка) то ничё не работает, но и ошибок никаких нет
PM MAIL   Вверх
dimazu
Дата 5.2.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 83
Регистрация: 4.3.2006

Репутация: 4
Всего: 5



Проверил. Работает. Записывает. 
Вот пример:
Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils,Registry, Classes, Windows;

var
  FReg     : TRegistry;
  TmpValue : String;
  S_String : String;
  Edited   : boolean;

Procedure WriteReg(_Value:String);
var reg:TRegistry;
begin
   reg := TRegistry.Create;
   try
    reg.RootKey := FReg.RootKey;
    reg.OpenKey(tmpValue, True);
    reg.WriteString(S_String, _Value );
   finally
    reg.Free;
   end;
end;
Procedure MakeString(const AKey, AValue, AData: String);

begin
  if AValue <> '' then
      if Pos(S_String, AValue) > 0 then
      begin
          tmpValue:=AKey;
          if Pos('.DEFAULT', tmpValue)>0 then
          begin
           if not Edited then WriteReg('534535345');
           Edited:=True;
          end;
  end;
end;

procedure Scan(Key: String);
var
  S: TStringList;
  I: Integer;
begin
  if FReg.OpenKeyReadOnly(Key) then
  try
    S := TStringList.Create;
    try
      FReg.GetValueNames(S);
      for I := 0 to S.Count - 1 do
      begin
        MakeString(Key, S.Strings[I], '');
        if FReg.GetDataType(S.Strings[I]) in [rdString, rdExpandString] then
        begin
          MakeString(Key, S.Strings[I], FReg.ReadString(S.Strings[I]));
          If Edited then Exit;
        end;
      end;
      S.Clear;
      FReg.GetKeyNames(S);
      for I := 0 to S.Count - 1 do
        if (S.Strings[I] <> '') then
          Scan(Key + '\' + S.Strings[I]);
    finally
      S.Free;
    end;
  finally
  ; //
  end;

end;

begin
  { TODO -oUser -cConsole Main : Insert code here }
  FReg := TRegistry.Create;
  FReg.RootKey := HKEY_USERS;
  S_String:='xxxxx';
  TmpValue:='';
  Edited:=False;
  Scan('');
  FReg.Free;
end.


PM MAIL   Вверх
Витаминка
Дата 5.2.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 9.12.2006

Репутация: 1
Всего: 1



Спасиб, всё заработало, жаль те плюс поставить не могу... Модеры плюсаните dimazu smile
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.