Страница 1 из 2

Exe-шники в Delphi

Добавлено: 28 янв 2007, 19:06
Сейчас_не_спящий
Можно ли в проект Delphi внедрить ЕХЕ-шник другой программы? Именно не сделать ссылку, а внедрить, чтобы после компиляции проект не требовал экзешник внедрённой программы.
Возможно ли это, если да, то как?

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 08:51
Duncon
Думаю возможно, поройся в сторону файлов ресурсов..
Или как вирус дописать к готовому exe в этом случае он будет запускаться вместе с основным...

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 09:54
SergeyS
Ну ты даёшь задачки! А зачем тебе это нужно? Какая хоть задача стоит?

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:00
Сейчас_не_спящий
Идей было, много, но хотя бы один пример..
Или даже если не вшить ЕХЕшник, то как открыть его? Например, Total Commander.exe:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm} //как понимаю тут прописать что-то типа {$R TotalCommander.exe}

procedure TForm1.Button1Click(Sender: TObject);
begin
// Тут операции по открытию Тотал Коммандера, какие? как это реализовать, в
//учебниках этого нету, а в процессе разработки требуется.
end;

end.

Если есть идеи пропишите их, буду весьма признателен

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:03
Сейчас_не_спящий
&quot писал(а):Ну ты даёшь задачки! А зачем тебе это нужно? Какая хоть задача стоит?
Нужно для души, хочу стать спецом, я вообще-то экономист, мне программирование по профессии не нужно, а для души само то=).

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:23
somewhere
Его надо тогда вытащить из ресурсов, запихать в файл где-нить в темпе и выполнить - если только так.

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:27
Сейчас_не_спящий
&quot писал(а):Его надо тогда вытащить из ресурсов, запихать в файл где-нить в темпе и выполнить - если только так.
Это как? Ты имеешь в виду запихать в память как обчный строковый файл? Или?..

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:32
LAngel
Сейчас_не_спящий писал(а):Нужно для души, хочу стать спецом, я вообще-то экономист, мне программирование по профессии не нужно, а для души само то=).
Коллега ;) )) Я тоже экономист по специальности, только работаю инженером-программистом.

Внедрить в ресурсы можно все, что угодно.
Открывай ресурс-эдитором *.res файл из проекта, пихай туда все, что нужно
(Вот, пример из моей проги, в которой используются функции сжатия из zlib1.dll, она лежит в ресурсах и если не найдена "распаковывается" из главного exe'шника)
[syntax="delphi"]procedure ExtractZLIB;
var
St: TResourceStream;
begin
St := TResourceStream.Create(HInstance, 'ZLIBDLL', 'BINARY');
try
with TFileStream.Create('.\zlib1.dll', fmCreate) do
try
CopyFrom(St, St.Size);
finally
Free;
end;
finally
St.Free;
end;
if not FileExists('.\zlib1.dll') then
Raise Exception.Create('Fatal Error: Can''t extract zlib1.dll');
end;[/syntax]

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:34
SergeyS
Вот кусок кода используемый мною в различных целях вызова внешних exe-шников:

Код: Выделить всё

function ExecuteCommand(Command: String): Cardinal;
var
  Rlst: LongBool;
  StartUpInfo: TStartUpInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartUpInfo, SizeOf(TStartUpInfo), 0);
  with StartUpInfo do
  begin
    cb := SizeOf(TStartUpInfo);
    dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
    wShowWindow := SW_SHOWNORMAL;
  end;
  Rlst := CreateProcess(nil, PChar(Command), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
  if Rlst then
  with ProcessInfo do begin
    WaitForInputIdle(hProcess, INFINITE); // ждем завершения инициализации
    WaitforSingleObject(ProcessInfo.hProcess, INFINITE); // ждем завершения процесса
    GetExitCodeProcess(ProcessInfo.hProcess, Result); // получаем код завершения
    CloseHandle(hThread); // закрываем дескриптор процесса
    CloseHandle(hProcess); // закрываем дескриптор потока
  end
  else Result := 0;
end;
где Command - есть выполняемая строка, может быть с параметрами и без

Re: Exe-шники в Delphi

Добавлено: 29 янв 2007, 10:37
SergeyS
ну накой надо пихать их в exe'шник? Зачем, пусть лежит рядышком.
Конечно, ради искусства можно и запихать, но зачем?