Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Сохранение бинарного файла в реестре с последующим его извлечением
Функции позволяют разбить файл на блоки 16к и затем поместить бинарные
данные в реестр, а так же собрать эти данные обратно в файл при необходимости.
Не знаю зачем этот код нужен , но возможно он пригодится для скрытого
хранения данных . Не рекомендуется (!) сохранять слишком большие файлы
в реестре , потому что размеры реестра ограничены .
Зависимости: Registry,SysUtils
Автор: Sergey, gloom@imail.ru, Koenigsberg
Copyright: KosilkA
Дата: 4 декабря 2003 г.
***************************************************** }
//////////////////////////////////////////////////
// функция разбивки и сохранения файла в реестр:
function SaveToRegistry(RootKey: HKEY; FileName, KeyName: string
): Bool;
//где RootKey-раздел реестра,
//FileName-путь к файлу ,
//KeyName-ключ реестра в который будем сохранять
var
FromF: file
;
NumRead, i: Integer;
Buf: array
[0..16383] of
byte;
reg: tregistry;
begin
try
AssignFile(FromF, filename);
Reset(FromF, 1);
reg := tregistry.Create;
reg.RootKey := rootkey;
if
reg.OpenKey(keyName, true) = false then
//если невозможно
//открыть ключ с правами
//записи , то что то не так
begin
result := false;
reg.Free;
exit; //выходим
end
;
i := 0;
repeat
//читаем и записывае в цикле
BlockRead(FromF, Buf, SizeOf(Buf), NumRead); //читаем блок из файла
if
numread <> 0 then
begin
reg.WriteBinaryData(inttostr(i), buf, numread); //сохраняем блок в реестр
inc(i);
end
;
until
(NumRead = 0);
CloseFile(FromF);
reg.CloseKey;
reg.Free;
result := true;
except
reg.CloseKey;
reg.Free;
result := false;
end
;
end
;
//////////////////////////////////////////////////
// функция сборки сохраненного файла:
function
BuildFromRegistry(RootKey: HKEY; KeyName, ToFileName: string
): Bool;
//где RootKey-раздел реестра,
//KeyName -ключ реестра ,
//ToFileName-имя выходного файла .
var
numwritten, i: integer;
ToF: file
;
Buf: array
[0..16383] of
byte;
reg: tregistry;
begin
try
AssignFile(ToF, tofilename);
Rewrite(ToF, 1);
reg := tregistry.Create;
reg.RootKey := rootkey;
if
reg.OpenKey(keyname, true) = false then
//если указанный ключ невозможно открыть - выходим
begin
result := false;
reg.Free;
exit;
end
;
i := 0;
repeat
//в цикле находим значения
//начиная с "0" , читаем их
//и добавляем блоки к файлу
if
reg.ValueExists(inttostr(i)) = true then
begin
reg.ReadBinaryData(inttostr(i), buf, reg.GetDataSize(inttostr(i)));
BlockWrite(ToF, Buf, reg.GetDataSize(inttostr(i)));
end
;
inc(i);
until
reg.ValueExists(inttostr(i)) = false;
CloseFile(ToF);
reg.CloseKey;
reg.Free;
result := true;
except
reg.CloseKey;
reg.Free;
result := false;
end
;
end
;
// Пример использования:
// сохранить:
SaveToRegistry(HKEY_CURRENT_USER, Application.ExeName, 'SoftwareMyDatatest');
// извлечь:
BuildFromRegistry(HKEY_CURRENT_USER, 'SoftwareMyDatatest', 'MyBuildApp.exe');