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 г. ***************************************************** } ////////////////////////////////////////////////// // функция разбивки и сохранения файла в реестр: functionSaveToRegistry(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');