Buscar

Gravando uma string em um .exe

Código

{Serão usados os objetos TStream do Delphi para gravar e ler uma string qualquer em um Executável.

  Neste exemplo utilizamos 2 TButtons e um componente TMemo.}


  implementation

  {$R *.DFM}

  { Função que faz a gravação no executável }
  function AttachToFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean;
  var
    aStream: TFileStream;
    iSize: Integer;
  begin
    Result := False;
    if not FileExists(AFileName) then
      Exit;
    try
      aStream := TFileStream.Create(AFileName,  fmOpenWrite or fmShareDenyWrite);
      MemoryStream.Seek(0, soFromBeginning);
      // posiciona no final do arquivo.
      aStream.Seek(0, soFromEnd);
      // copia os dados para um Stream de memória.
      aStream.CopyFrom(MemoryStream, 0);
      // salva o “Stream-Size”
      iSize := MemoryStream.Size + SizeOf(Integer);
      aStream.Write(iSize, SizeOf(iSize));
    finally
      aStream.Free;
    end;
    Result := True;
  end;

  { Lê a string do executável }
  function LoadFromFile(const AFileName: String; MemoryStream: TMemoryStream): Boolean;
  var
    aStream: TFileStream;
    iSize: Integer;
  begin
    Result := False;
    if not FileExists(AFileName) then
    Exit;
    try
       aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
      // posiciona para leitura da String recém gravada.
      aStream.Seek( - SizeOf(Integer), soFromEnd);
      aStream.Read(iSize, SizeOf(iSize));
      if iSize > aStream.Size then
      begin
        aStream.Free;
        Exit;
      end;
      // Carrega em um Stream de memória.
      aStream.Seek( - iSize, soFromEnd);
      MemoryStream.SetSize(iSize - SizeOf(Integer));
      MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
      MemoryStream.Seek(0, soFromBeginning);
    finally
      aStream.Free;
    end;
    Result := True;
  end;

  { Salva a string no executável }
  procedure TForm1.btnSalvaClick(Sender: TObject);
  var
    aStream: TMemoryStream;
  begin
    aStream := TMemoryStream.Create;
    Memo1.Lines.SaveToStream(aStream);
    AttachToFile(‘Test.exe’, aStream);
    aStream.Free;
    Memo1.Clear;
   end;

  { Carrega a string gravada no executável }
  procedure TForm1.btnLerClick(Sender: TObject);
  var
    aStream: TMemoryStream;
  begin
    aStream := TMemoryStream.Create;
    LoadFromFile(‘Test.exe’, aStream);
    Memo1.Lines.LoadFromStream(aStream);
    aStream.Free;
  end;

end.
 

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 27/08/03
Por: Amilton Maciel
Visualizada: 2017 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009