Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Работа с реестром


Автор: MuForum 25.6.2007, 02:02
Доброе время суток!


Столкнулся с такой проблемой, мне необходимо удалить ключ с содержимым или удалить какой-то командой всё содержимое из ключа, а затем удалить и сам ключ!


P.S. -> В интернете похожего не нашел и не смог решить свою проблему, хотя на первый взгляд всё просто!

Автор: Alexeis 25.6.2007, 11:11
  Удалить ключ можно методом DeleteKey, очистить значение DeleteValue.

Цитата(MuForum @  25.6.2007,  02:02 Найти цитируемый пост)
P.S. -> В интернете похожего не нашел и не смог решить свою проблему, хотя на первый взгляд всё просто! 

  
  Код в студию. 100 раз делал, ничего сложного.

Автор: MuForum 25.6.2007, 11:15
Код

procedure TForm2Settings.dxButton1Click(Sender: TObject); // Кнопка Save.
begin
  if (CheckBox4.Checked=true) then  // Параметр, при статусе true, необходимо удалить ключ!
  Begin
  Form2Settings.Visible := false;
  pReg := TRegistry.Create;
  pReg.RootKey := HKEY_CURRENT_USER;
  pReg.OpenKey('Software\', True);
  pReg.DeleteKey('Software\Webzen');
  pReg.CloseKey;
  pReg.Free;
  Application.Terminate;
  end
  else
  pReg := TRegistry.Create;
  pReg.RootKey := HKEY_CURRENT_USER;
  pReg.OpenKey('Software\Webzen\Mu\Config\', true);
  pReg.WriteBool('SoundOnOff', CheckBox1.Checked);
  pReg.WriteBool('MusicOnOff', CheckBox2.Checked);
  pReg.WriteBool('WindowMode', CheckBox3.Checked);
  pReg.WriteInteger('Resolution', RadioGroup1.ItemIndex);
  pReg.WriteInteger('ColorDepth', RadioGroup2.ItemIndex);
  pReg.WriteInteger('RefreshRate', RadioGroup3.ItemIndex);
  pReg.WriteString('ID', Edit1.text);
  pReg.CloseKey;
  pReg.Free;
  Close;
end;


 smile 

Автор: Alexeis 25.6.2007, 11:28
Цитата

Call DeleteKey to remove a specified key and its associated data, if any, from the registry. Under Windows 95, if the key has subkeys, the subkeys and any associated data are also removed. Under Windows NT, subkeys must be explicitly deleted by separate calls to DeleteKey.  

DeleteKey returns true if key deletion is successful. On error, DeleteKey returns false. 



Добавлено через 1 минуту и 9 секунд
Т.е. ветку нельзя удалять пока в ней есть ключи. Нужно удалить все ключи а только потом ветку.

Автор: MuForum 25.6.2007, 11:30
Цитата(Alexeis @ 25.6.2007,  11:28)
Цитата

Call DeleteKey to remove a specified key and its associated data, if any, from the registry. Under Windows 95, if the key has subkeys, the subkeys and any associated data are also removed. Under Windows NT, subkeys must be explicitly deleted by separate calls to DeleteKey.  

DeleteKey returns true if key deletion is successful. On error, DeleteKey returns false. 



Добавлено через 1 минуту и 9 секунд
Т.е. ветку нельзя удалять пока в ней есть ключи. Нужно удалить все ключи а только потом ветку. 


1) А как удалить одним махом все настройки из ключа?
2) Можно наглядный пример пожалуйста?!

Автор: Alexeis 25.6.2007, 12:08
  В прикрепленном файле скрипт для создания ветки

Код

procedure TForm1.FormCreate(Sender: TObject);
var
  R : TRegistry;

const
  Root = 'HKEY_CURRENT_USER';

procedure RecurseDelete(key : AnsiString);
var
  s  : TStringList;
  i  : Integer;
Begin
  R.OpenKey(key, false);
  if R.HasSubKeys
  then
    Begin
      s := TStringList.Create;
      R.GetKeyNames(s);
      R.CloseKey;
      for I := 0 to s.Count - 1
      do
        RecurseDelete(key + '\' + s[i]);

      s.Free;
    End;

  R.CloseKey;
  R.DeleteKey(key);
end;

begin
  R := TRegistry.Create;
  R.RootKey := HKEY_CURRENT_USER;
  RecurseDelete('test000');
  R.Free;
end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)