Внешний вид сайта:

Записать список строк в системный реестр

Можно ли записать содержание списка строк в системный реестр, а потом прочитать их из реестра? Реально. Здесь мы будем записывать каждую строку как значение ключа, а имя ключа будет иметь индекс каждого элемента в списке.
procedure TDPRegistry.SaveStringListInRegistry(
  _RootKey: HKEY; _Localkey: String; Strings: TStrings
);
var
  TR: TRegIniFile;
  LStringIndex: Integer;
begin
  TR := TRegIniFile.Create('');
  try
    case _RootKey of // значение по умолчанию RootKey=HKEY_CURRENT_USER
      HKEY_CLASSES_ROOT,
      HKEY_CURRENT_USER,
      HKEY_LOCAL_MACHINE,
      HKEY_USERS,
      HKEY_PERFORMANCE_DATA,
      HKEY_CURRENT_CONFIG,
      HKEY_DYN_DATA: TR.RootKey := _RootKey;
    end;
    // make sure no entries for this section/ key
    TR.EraseSection(_Localkey);
    with TRegistry(TR) do
    begin
      if OpenKey(_Localkey, true) then
      begin
        try
          for LStringIndex := 0 to Strings.Count - 1 do
            WriteString (IntToStr(LStringIndex), Strings[LStringIndex]);
        finally
          CloseKey;
        end;
      end;
    end;
  finally
    TR.Free;
  end;
end;

{ Получаем список строк из реестра }
procedure TDPRegistry.GetStringListFromRegistry(
  _RootKey: HKEY; _Localkey: String; Strings: TStrings
);
var
  TR: TRegIniFile;
  LStringIndex: Integer;
  RegKeyInfo: TRegKeyInfo;
begin
  Strings.Clear;  // начинаем без элементов списка строк
  TR := TRegIniFile.Create('');
  try
    case _RootKey of // default is  RootKey=HKEY_CURRENT_USER
      HKEY_CLASSES_ROOT,
      HKEY_CURRENT_USER,
      HKEY_LOCAL_MACHINE,
      HKEY_USERS,
      HKEY_PERFORMANCE_DATA,
      HKEY_CURRENT_CONFIG,
      HKEY_DYN_DATA: TR.RootKey := _RootKey;
    end;
    {TR.ReadSectionValues(_Localkey, Strings); не работает как надо,
    потому что возвращает строки как "1=Value", "2=Value"...}
    with TRegistry(TR) do
    begin
      if OpenKey(_Localkey, true) then
      begin
        try
          if (GetKeyInfo(RegKeyInfo)) then
          begin
            for LStringIndex := 0 to RegKeyInfo.NumValues - 1 do
              Strings.Add(ReadString(IntToStr(LStringIndex)));
          end;
        finally
          CloseKey;
        end;
      end;
    end;
  finally
    TR.Free;
  end;
end;

Комментарии

Нет комментариев. Ваш будет первым!