Streams in Registry schreiben und lesen |
|
| System | Win9x, WinNT, Win2000, WinXP, Vista, Win7 |
|---|---|
| Ab Delphi-Version | Delphi 1 |
| Letzte Änderung | 28.09.2010 |
Mit den beiden folgenden Funktionen können Daten, die in einem Stream gespeichert sind, in die Registry geschrieben bzw. Daten aus der Registry in einen Stream eingelesen werden.Die Daten werden als Binärwert in der Registry gespeichert.
uses Registry;
function StreamToRegistry(Stream: TStream; RootKey: HKEY; const Key, Name: string): Boolean;
var
Reg: TRegistry;
Buf: Pointer;
Size: Cardinal;
begin
Result := True;
Buf := nil;
try
// Datei einlesen
Size := Stream.Size - Stream.Position;
if Size > 0 then
begin
Buf := AllocMem(Size);
Stream.Read(Buf^, Size);
end;
// Daten in Registry schreiben
if Size > 0 then
begin
Reg := TRegistry.Create;
try
Reg.RootKey := RootKey;
if Reg.OpenKey(Key, True) then
begin
Reg.WriteBinaryData(Name, Buf^, Size);
Reg.CloseKey;
end else Result := False;
finally
Reg.Free;
end;
end;
finally
if Assigned(Buf) then FreeMem(Buf);
end;
end;
function StreamFromRegistry(Stream: TStream; RootKey: HKEY; const Key, Name: string): Boolean;
var
Reg: TRegistry;
Buf: Pointer;
Size: Cardinal;
begin
Result := False;
Reg := TRegistry.Create;
try
Reg.RootKey := RootKey;
if Reg.OpenKeyReadOnly(Key) then
begin
if (Reg.ValueExists(Name)) and (Reg.GetDataType(Name) = rdBinary) then
begin
Result := True;
Size := Reg.GetDataSize(Name);
if Size > 0 then
begin
Buf := AllocMem(Size);
try
Reg.ReadBinaryData(Name, Buf^, Size);
Stream.Write(Buf^, Size);
finally
FreeMem(Buf);
end;
end;
end;
Reg.CloseKey;
end;
finally
Reg.Free;
end;
end;