Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Перечислить ключи реестра

Delphi , ОС и Железо , Реестр

Перечислить ключи реестра

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

{ 
  This example demonstrates how to enumerate all registry keys from 
  a certain key (here: HKEY_CURRENT_USER) 
}

 { 
  Dieses Beispiel listet alle Eintrage eines bestimmten Schlussels 
  in der Registrierung auf. (hier: HKEY_CURRENT_USER) 
}



 uses
   Registry;

 procedure TForm1.Button1Click(Sender: TObject);
 var
   indent: Integer;

      procedure EnumAllKeys(hkey: THandle);
   var
     l: TStringList;
     n: Integer;
   begin
     Inc(indent, 2);
     with TRegistry.Create do
       try
         RootKey := hkey;
         OpenKey(EmptyStr, False);
         l := TStringList.Create;
         try
           GetKeynames(l);
           CloseKey;
           for n := 0 to l.Count - 1 do
           begin
             memo1.Lines.Add(StringOfChar(' ', indent) + l[n]);
             if OpenKey(l[n], False) then
             begin
               EnumAllKeys(CurrentKey);
               CloseKey;
             end;
           end;
         finally
           l.Free
         end;
       finally
         Free;
       end;
     Dec(indent, 2);
   end;

 begin
   Memo1.Clear;
   Memo1.Lines.Add('Keys under HKEY_CURRENT_USER');
   indent := 0;
   Memo1.Lines.BeginUpdate;
   try
     EnumAllKEys(HKEY_CURRENT_USER);
   finally
     Memo1.Lines.EndUpdate;
   end;
 end;

Перевод контента на русский язык:

Это фрагмент кода Delphi, демонстрирующий, как перечислить все регистрационные ключи с определенным ключом (в этом случае - HKEY_CURRENT_USER). Код использует компонент TRegistry для взаимодействия с Windows-регистром.

Рассмотрим, что код делает:

  1. Он определяет процедуру EnumAllKeys, которая принимает параметр hkey типа THandle, представляющий регистрационный ключ для перечисления.
  2. Внутри EnumAllKeys создается новый экземпляр TRegistry и устанавливается корневой ключ на предоставленный hkey.
  3. Открывается ключ с помощью OpenKey(EmptyStr, False).
  4. Создается TStringList, называемый l, для хранения имен ключей.
  5. Вызывается GetKeynames(l) для получения всех имен ключей в регистрационном ключе.
  6. Проводится цикл по каждому имени ключа в списке и добавляется к контролу мемо (memo1) с уровнем отступа, заданным переменной indent.
  7. Если ключ не пустой, рекурсивно вызывается EnumAllKeys с текущим ключом как новым корневым ключом.

Основная процедура Button1Click настраивает начальную конфигурацию UI, очищает любые существующие тексты в контроле мемо (memo1) и затем вызывает EnumAllKeys с HKEY_CURRENT_USER как начальным пунктом.

Когда вы запустите этот код, он отобразит список всех регистрационных ключей под HKEY_CURRENT_USER в контроле мемо. Уровень отступа используется для отображения иерархии регистрационных ключей.

Альтернативное решение с использованием встроенных функций Delphi:

uses
  Registry;

procedure TForm1.Button1Click(Sender: TObject);
var
  hkey: THandle;
  l: TStringList;
  n: Integer;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Keys under HKEY_CURRENT_USER');
  hkey := RegOpenKeyEx(HKEY_CURRENT_USER, '', 0, KEY_READ);

  if hkey <> INVALID_HANDLE_VALUE then
  begin
    l := TStringList.Create;
    try
      RegEnumKey(hkey, 0, PChar(l[0]));
      for n := 1 to l.Count - 1 do
      begin
        Memo1.Lines.Add(StringOfChar('   ', n mod 2) + l[n]);
        if RegOpenKeyEx(HKEY_CURRENT_USER, l[n], 0, KEY_READ) <> INVALID_HANDLE_VALUE then
        begin
          RegEnumKey(hkey, 0, PChar(l[0]));
          for m := 1 to l.Count - 1 do
          begin
            Memo1.Lines.Add(StringOfChar('     ', m mod 2) + l[m]);
          end;
        end;
      end;
    finally
      l.Free;
    end;
    RegCloseKey(hkey);
  end;
end;

Код использует функции RegOpenKeyEx и RegEnumKey для открытия и перечисления регистрационных ключей под HKEY_CURRENT_USER. Отступ достигается с помощью комбинации строкового конкатенации и операций модуля.

В статье описывается пример программирования на языке Delphi, который перечисляет все ключи реестра, начиная с ключа HKEY_CURRENT_USER.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Реестр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 13:46:00/0.0052680969238281/1