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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реестр, и его ключи 
:(
    Опции темы
SoWa
  Дата 19.2.2005, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



Привет всем!
Помогите пожалуйста с реализацией:
Я знаю некоторый путь в реестре, и там хранится много(не знаю сколько) переменных(или "ключей").
И надо весь этот каталог почистить, т.е. удалить из него все ключи. smile


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Alex
Дата 19.2.2005, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

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



Цитата
VCL Reference
ReadSection method (TRegIniFile)

TRegIniFile See also

Retrieves the names of all data values associated with a key, and stores the names in a TStrings object.

Delphi syntax:

procedure ReadSection(const Section: String; Strings: TStrings);

C++ syntax:

void __fastcall ReadSection(const AnsiString Section, Classes::TStrings
* Strings);

Description

Call ReadSection to retrieve the names of all data values associated with a key into a TStrings object.

Section is a string identifying the key for which to retrieve data-value names.

Strings specifies the string object to hold the retrieved names. Strings can point to a TStrings object such as a string list, or to a component property, such as Items for a TListBox component, that is a TStrings object itself.



--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
<Spawn>
Дата 20.2.2005, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

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



Если я правильно понял, то:

Код

uses ..., Registry;

...

 with TRegistry.Create do
 try
   RootKey := HKEY_CURRENT_USER;
   if KeyExists('\Software\Test\') then
     DeleteKey('\Software\Test\');
 finally
   Free;
 end;

Добавлено @ 16:58
Или если нужно удалить подключи ключа, то:

Код

var
 List: TStringList;
begin
 with TRegistry.Create do
 try
   RootKey := HKEY_CURRENT_USER;
   if OpenKey('\Software\Test\', False) then
   try
     List := TStringList.Create;
     try
       GetKeyNames(List);
       with List do
         while Count <> 0 do
         begin
           DeleteKey(Strings[Count - 1]);
           Delete(Count - 1);
         end;
     finally
       List.Free;
     end;
   finally
     CloseKey;
   end;
 finally
   Free;
 end;


Это сообщение отредактировал(а) <Spawn> - 20.2.2005, 16:54


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
SoWa
Дата 20.2.2005, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004

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



О! Спасибо!


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
Александра
Дата 20.2.2005, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

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



заметка: при удалении только параметров лучше сразу удалить ключ весь, а потом его просто восстановить. так быстрее будет
--------------------
PM   Вверх
N3tM4n
Дата 20.2.2005, 18:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот код моего рекурсивного удаления ключей на WinAPI:
Код

procedure RegDeleteWSubkeys(KeyToOpen:HKEY;SubKey:String);
var Error,Index:LongInt;
   Key:HKEY;
   KeyName:Array[0..1000] of char;
begin
       RegOpenKey(KeyToOpen,PChar(SubKey),Key);
       Index:=0;
       Error:=RegEnumKey(Key,Index,KeyName,SizeOf(KeyName));
       while Error=ERROR_SUCCESS do begin
       RegDeleteWSubkeys(KeyToOpen,SubKey+'\'+KeyName);
       inc(index);
       Error:=RegEnumKey(Key,Index,KeyName,SizeOf(KeyName));
       end;
       RegCloseKey(Key);
       RegDeleteKey(KeyToOpen,PChar(SubKey));
end;

  Вверх
Girder
Дата 20.2.2005, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


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

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



Цитата
заметка: при удалении только параметров лучше сразу удалить ключ весь, а потом его просто восстановить. так быстрее будет
Только если ветка не содержит поразделы smile

N3tM4n если RegDeleteKey сработал... то inc(Index) делать не надо! Иначе ты не все ключи удалиш!

Что-то типо ентого должно быть:
Код
function RegDeleteKeyAll(RootKey:HKey;SubKey:string):Boolean;
const BufSize=2048;
var Index:DWord;
   hSubKey:HKey;
   lpName:array [0..BufSize] of char;
   NameSize:DWord;
   LWT:_FileTime;
begin
Result:=true;
RegDeleteKey(RootKey,PChar(SubKey));
if RegOpenKeyEx(RootKey,PChar(SubKey),0,KEY_ALL_ACCESS,hSubKey)=ERROR_SUCCESS then
 begin
  Result:=false;
  Index:=0;
  NameSize:=BufSize;
  while RegEnumKeyEx(hSubKey,Index,PChar(@lpName),NameSize,nil,nil,nil,PFileTime(@LWT))=ERROR_SUCCESS do
   begin
    Result:=true and RegDeleteKeyAll(hSubKey,Copy(lpName,0,NameSize));
    if Result=false then inc(Index);
    NameSize:=BufSize;
   end;
  RegCloseKey(hSubKey);
  if (Result)and(RegDeleteKey(RootKey,PChar(SubKey))<>Error_Success) then Result:=false;
 end;
end;
PS:Удаляет полностью заданную ветку.

Ну и вот так использовать:
Код
procedure TForm1.Button1Click(Sender: TObject);
var SubKey:String;
   hSubKey:HKey;
   Dispositon:DWord;
begin
SubKey:='SOFTWARE\Girder';
if RegDeleteKeyAll(HKEY_LOCAL_MACHINE,SubKey) then
 Caption:='Удалил!' else Caption:='Удалене не полное!';
{//Востанавливаем самый верхний ключ
if RegCreateKeyEx(HKEY_LOCAL_MACHINE,PChar(SubKey),0,nil,Reg_Option_Non_Volatile,
                  Key_All_Access,nil,hSubKey,@Dispositon)=Error_Success then
 RegCloseKey(hSubKey);}
end;


Это сообщение отредактировал(а) Girder - 20.2.2005, 20:10


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Александра
Дата 20.2.2005, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.2.2005
Где: Москва

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



Цитата(Girder @ 20.2.2005, 20:09)
Цитата
заметка: при удалении только параметров лучше сразу удалить ключ весь, а потом его просто восстановить. так быстрее будет
Только если ветка не содержит поразделы smile

я имела ввиду удаление методом DeleteKey() класса TRegistry, ибо там уже реализован хороший алгоритм рекурентного обхода...
--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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