Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2008, 13:00   #1
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию Функция Tregistry.keyexists не работает

вот код
Код:
Procedure Tform1.LoadPassword;
var r:Tregistry;
begin
  R:=Tregistry.Create;
  r.RootKey:=HKEY_LOCAL_MACHINE;
  r.OpenKey('Software\xxxxx',true);
  password:=Encrypt(r.ReadString('password')); 
  if r.KeyExists('1') then
  configform.sCheckBox4.Checked:=r.ReadBool('1');
  //configform.sCheckBox3.Checked:=r.ReadBool('1');
  if r.KeyExists('2') then
  configform.sCheckBox4.Checked:=r.ReadBool('2');
  if r.KeyExists('3') then
  configform.sCheckBox5.Checked:=r.ReadBool('3');
  r.Free;
end;
если убрать проверку на условия то все считается с реестра.Это значит что параметры 1,2,3 там существуют.
Но почему то r.keyexists('1') выдает false??
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 05.08.2008, 13:36   #2
Showy
Форумчанин Подтвердите свой е-майл
 
Аватар для Showy
 
Регистрация: 08.08.2007
Сообщений: 183
По умолчанию

надо писать например вот так
Код:
if r.KeyExists('Software\xxxxx\1') then
Код:
if r.KeyExists('1') then  
  configform.sCheckBox4.Checked:=r.ReadBool('1');
Ты читаешь значение а проверяешь ключ? может быть тебе надо ValueExists использовать.
Until The End Of Time
Showy вне форума Ответить с цитированием
Старый 05.08.2008, 14:24   #3
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

спасибо.
Мне оказывается надо было valueExists.я думал эти 2 метода одинаковые
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 18.09.2008, 08:52   #4
Smoke
 
Аватар для Smoke
 
Регистрация: 21.01.2007
Сообщений: 8
По умолчанию

А тогда может мне кто-нить поможет?
Код:
var
  R: TRegistry;
begin
  R := TRegistry.Create;
  R.RootKey := HKEY_CURRENT_USER;
  R.SaveKey('Software\MyKey', 'c:\qwe.reg');
end;
Итог: Файл создается, но пустой, хотя ключ существует...

P.S.
Либо подскажите, как из реестра сделать экспорт ветки в стандартный виндовый .reg-файл?

Код:
procedure GetString(R: TRegistry; F: TStrings; Key: String);
var
  W: TStrings;
  i: Integer;
begin
  W := TStringList.Create;
  R.OpenKey(Key, True);
  R.GetValueNames(W);
  F.Add('');
  F.Add('[HKEY_CURRENT_USER\Software\MyProg\' + Key + ']');
  for i := 0 to W.Count - 1 do
    F.Add(R.ReadString(W[i]));
  W.Clear;
  R.GetKeyNames(W);
  R.CloseKey;
  for i := 0 to W.Count - 1 do
    GetString(R, F, W[i]);
  W.Free;
end;

procedure ExportRegistry(const Profile: String);
var
  R: TRegistry;
  F: TStrings;
  FN: String;
begin
  FN := ExtractFilePath(ParamStr(0)) + 'profiles\';
  FN := FN + Profile + '.reg';
  R := TRegistry.Create;
  R.RootKey := HKEY_CURRENT_USER;
  F := TStringList.Create;
  F.Add('Windows Registry Editor Version 5.00');
  GetString(R, F, '');
  F.SaveToFile(FN);
  F.Free;
  R.Free;
end;
Что здесь не правильно?

Последний раз редактировалось Smoke; 18.09.2008 в 08:55.
Smoke вне форума Ответить с цитированием
Старый 18.09.2008, 09:04   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Может надо сначала OpenKey сделать потом Save и Close? ну я так в теории..
BOBAH13 вне форума Ответить с цитированием
Старый 18.09.2008, 09:42   #6
Smoke
 
Аватар для Smoke
 
Регистрация: 21.01.2007
Сообщений: 8
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Может надо сначала OpenKey сделать потом Save и Close? ну я так в теории..
Я и так уже пропробовать успел - ноль эффекта, так что склонясь к своему "мега"-коду в котором уже кое-что подправил...
Код:
function PreparePath(const Path: String): String;
var
  R: String;
  i: Integer;
begin
  R := '';
  for i := 1 to Length(Path) do
  begin
    R := R + Path[i];
    if Path[i] = '\' then
      R := R + Path[i];
  end;
  Result := R;
end;

procedure GetString(R: Tregistry; F: TStrings; Key: String);
var
  W: TStrings;
  i: Integer;
  Value: String;
  Data: String;
  Typ: TRegDataType;
begin
  W := TStringList.Create;
  R.OpenKey(Key, True);
  R.GetValueNames(W);
  F.Add('');
  F.Add('[HKEY_CURRENT_USER\' + Key + ']');
  for i := 0 to W.Count - 1 do
  begin
    Data := '';
    Value := W[i];
    if Value = '' then
      Value := '@'
    else
      Value := '"' + Value + '"';
    Typ := R.GetDataType(W[i]);
    case Typ of
      rdBinary:
        begin
          //Как обрабатывать бинарные данные???
        end;
      rdInteger:
        begin
          Data := IntToHex(R.ReadInteger(W[i]), 8);
          Data := 'dword:' + Data;
        end;
      rdString:
        begin
          Data := R.ReadString(W[i]);
          Data := PreparePath(Data);
          Data := '"' + Data + '"';
        end;
    end;
    F.Add(Value + '=' + Data);
  end;
  W.Clear;
  R.GetKeyNames(W);
  R.CloseKey;
  for i := 0 to W.Count - 1 do
    GetString(R, F, Key + W[i] + '\');
  W.Free;
end;

procedure ExportRegistry(const Profile: String);
var
  R: TRegistry;
  F: TStrings;
  FN: String;
begin
  FN := ExtractFilePath(ParamStr(0)) + 'profiles\';
  FN := FN + Profile + '.reg';
  R := TRegistry.Create;
  R.RootKey := HKEY_CURRENT_USER;
  F := TStringList.Create;
  F.Add('Windows Registry Editor Version 5.00');
  GetString(R, F, 'Software\MyProg\');
  F.SaveToFile(FN);
  F.Free;
  R.Free;
end;
Smoke вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает функция keybd_event Hintman Win Api 31 05.06.2011 14:16
TRegistry photozaz Общие вопросы Delphi 5 19.09.2008 09:09
Не работает функция gets()!!! Ilya'91 Общие вопросы C/C++ 1 28.07.2008 23:16
Не работает функция floor в Java POPOV Помощь студентам 1 24.04.2008 14:08
не корректно работает функция "если" (+) zetrix Microsoft Office Excel 0 30.10.2006 19:19