Вот пример, который записывает из одного приложение, в другую программу (ЕХЕ) текст. Но этот текст может быть и другая программа.
При этом, программа, в которую записан текст полностью работоспособна и открывается проводником.
Код:
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);
aStream.Seek(0, soFromEnd);
aStream.CopyFrom(MemoryStream, 0);
iSize := MemoryStream.Size + SizeOf(Integer);
aStream.Write(iSize, SizeOf(iSize));
Finally
aStream.Free;
end;
Result := True;
end;
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);
aStream.Seek(-SizeOf(Integer), soFromEnd);
aStream.Read(iSize, SizeOf(iSize));
if(iSize > aStream.Size) then begin
aStream.Free;
Exit;
end;
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;
////////////////////////
Вот пример загрузки (уже в записанную программу):
var
aStream: TMemoryStream;
begin
aStream := TMemoryStream.Create;
Try
LoadFromFile(ExtractFileName(ParamStr(0)), aStream); // загружаю из самого себя
Memo1.Lines.LoadFromStream(aStream)
Except
ShowMessage('Ошибка!!!');
Halt; // выхожу
end;
aStream.Free;
/// а вот пример записывания в файл:
var
aStream: TMemoryStream;
begin
AStream := TMemoryStream.Create;
Memo1.Lines.SaveToStream(aStream); // загружаю
/// записываю нужную информацию...
AttachToFile('C:\1.exe', aStream);
///////////////////////////////////////////
aStream.Free;