Получить многострочные значения из реестра и преобразовать их в TStringList
function ReadMultirowKey(reg: TRegistry; Key: string): TStrings;
const
bufsize = 100;
var
i: integer;
s1: string;
sl: TStringList;
bin: array[1..bufsize] of char;
begintry
result := nil;
sl := nil;
sl := TStringList.Create;
ifnot Assigned(reg) thenraise Exception.Create('TRegistry object not assigned.');
FillChar(bin, bufsize, #0);
reg.ReadBinaryData(Key, bin, bufsize);
i := 1;
s1 := '';
while i < bufsize dobeginif ord(bin[i]) >= 32 then
s1 := s1 + bin[i]
elsebeginif Length(s1) > 0 thenbegin
sl.Add(s1);
s1 := '';
end;
end;
inc(i);
end;
result := sl;
except
sl.Free;
raise;
end;
end;
Функция ReadMultirowKey предназначена для чтения мультистрочного ключевого значения из реестра Windows и преобразования его в тип TStringList. Функция принимает два параметра: reg типа TRegistry, представляющий объект реестра, и Key типа string, имя ключа, который нужно прочитать.
Функция работает следующим образом:
Создается новый экземпляр класса TStringList под названием sl.
Проверяется, является ли объект reg ассигнированным. Если нет, то выбрасывается исключение.
Декларируется бинарный буфер bin размером в bufsize (в этом случае равен 100).
Вызывается метод ReadBinaryData объекта реестра для чтения данных из указанного ключа в бинарный буфер. Буфер заполняется значением реестра.
Инициализируется целочисленная переменная i равной 1, а строковая переменная s1 - пустой строкой.
Входит в цикл, продолжающийся до обработки всех символов в бинарном буфере (то есть, пока i не станет больше или равно bufsize).
В каждом шаге цикла, если текущий символ является печатаемым ASCII-символом (то есть, его код равен 32 или выше), добавляется этот символ к строке s1. Если символ не печатаемый, проверяется, не пустая ли строка s1, и если да, то добавляется она в список sl и затем сбрасывается до пустой строки.
После обработки всех символов в бинарном буфере функция возвращает результат в виде списка sl.
Если происходит исключение при выполнении функции, освобождается память, выделенная для sl, и выбрасывается исключение.
Функция возвращает список TStringList, содержащий мультистрочное ключевое значение, прочитанное из реестра.
Альтернативное решение с использованием встроенных функций Delphi:
Эта функция проще и более эффективна, чем оригинальная. Она напрямую читает значение реестра в список TStringList, не обрабатывая бинарные данные вручную.
Функция ReadMultirowKey из Delphi позволяет получать многострочные значения из реестра Windows и преобразовывать их в TStringList, что позволяет работать с ними как с обычными строками.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.