Home » Tipps & Tricks » System » Registry » Streams in Registry schreiben und lesen
Streams in Registry schreiben und lesen
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;