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

Получить многострочные значения из реестра и преобразовать их в TStringList

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

Получить многострочные значения из реестра и преобразовать их в TStringList


function ReadMultirowKey(reg: TRegistry; Key: string): TStrings;
const
  bufsize = 100;
var
  i: integer;
  s1: string;
  sl: TStringList;
  bin: array[1..bufsize] of char;
begin
  try
    result := nil;
    sl := nil;
    sl := TStringList.Create;
    if not Assigned(reg) then
      raise Exception.Create('TRegistry object not assigned.');
    FillChar(bin, bufsize, #0);
    reg.ReadBinaryData(Key, bin, bufsize);
    i := 1;
    s1 := '';
    while i < bufsize do
    begin
      if ord(bin[i]) >= 32 then
        s1 := s1 + bin[i]
      else
      begin
        if Length(s1) > 0 then
        begin
          sl.Add(s1);
          s1 := '';
        end;
      end;
      inc(i);
    end;
    result := sl;
  except
    sl.Free;
    raise;
  end;
end;

Функция ReadMultirowKey предназначена для чтения мультистрочного ключевого значения из реестра Windows и преобразования его в тип TStringList. Функция принимает два параметра: reg типа TRegistry, представляющий объект реестра, и Key типа string, имя ключа, который нужно прочитать.

Функция работает следующим образом:

  1. Создается новый экземпляр класса TStringList под названием sl.
  2. Проверяется, является ли объект reg ассигнированным. Если нет, то выбрасывается исключение.
  3. Декларируется бинарный буфер bin размером в bufsize (в этом случае равен 100).
  4. Вызывается метод ReadBinaryData объекта реестра для чтения данных из указанного ключа в бинарный буфер. Буфер заполняется значением реестра.
  5. Инициализируется целочисленная переменная i равной 1, а строковая переменная s1 - пустой строкой.
  6. Входит в цикл, продолжающийся до обработки всех символов в бинарном буфере (то есть, пока i не станет больше или равно bufsize).
  7. В каждом шаге цикла, если текущий символ является печатаемым ASCII-символом (то есть, его код равен 32 или выше), добавляется этот символ к строке s1. Если символ не печатаемый, проверяется, не пустая ли строка s1, и если да, то добавляется она в список sl и затем сбрасывается до пустой строки.
  8. После обработки всех символов в бинарном буфере функция возвращает результат в виде списка sl.
  9. Если происходит исключение при выполнении функции, освобождается память, выделенная для sl, и выбрасывается исключение.

Функция возвращает список TStringList, содержащий мультистрочное ключевое значение, прочитанное из реестра.

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

function ReadMultirowKey(Reg: TRegistry; Key: string): TStringList;
var
  s: string;
begin
  Result := TStringList.Create;

  try
    Reg.ReadBinaryData(Key, Result);
  except
    Result.Free;
    raise;
  end;
end;

Эта функция проще и более эффективна, чем оригинальная. Она напрямую читает значение реестра в список TStringList, не обрабатывая бинарные данные вручную.

Функция ReadMultirowKey из Delphi позволяет получать многострочные значения из реестра Windows и преобразовывать их в TStringList, что позволяет работать с ними как с обычными строками.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-07-25 10:12:11/0.0063700675964355/0