Можно ли записать содержание списка строк в системный реестр, а потом прочитать их из реестра? Реально. Здесь мы будем записывать каждую строку как значение ключа, а имя ключа будет иметь индекс каждого элемента в списке.
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;
Комментарии