Показать сообщение отдельно
  #7  
Старый 02.10.2010, 23:30
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Вот пример, который записывает из одного приложение, в другую программу (ЕХЕ) текст. Но этот текст может быть и другая программа.
При этом, программа, в которую записан текст полностью работоспособна и открывается проводником.

Код:
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;
__________________
Помогаю за Спасибо
Ответить с цитированием