Exe-шники в Delphi
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Сейчас_не_спящий
- Сообщения: 46
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Можно ли в проект Delphi внедрить ЕХЕ-шник другой программы? Именно не сделать ссылку, а внедрить, чтобы после компиляции проект не требовал экзешник внедрённой программы.
Возможно ли это, если да, то как?
Возможно ли это, если да, то как?
Всё не знает никто, но важно найти того кто знает нужное...
Думаю возможно, поройся в сторону файлов ресурсов..
Или как вирус дописать к готовому exe в этом случае он будет запускаться вместе с основным...
Или как вирус дописать к готовому exe в этом случае он будет запускаться вместе с основным...
- Сейчас_не_спящий
- Сообщения: 46
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Идей было, много, но хотя бы один пример..
Или даже если не вшить ЕХЕшник, то как открыть его? Например, 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.
Если есть идеи пропишите их, буду весьма признателен
Или даже если не вшить ЕХЕшник, то как открыть его? Например, 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.
Если есть идеи пропишите их, буду весьма признателен
Всё не знает никто, но важно найти того кто знает нужное...
- Сейчас_не_спящий
- Сообщения: 46
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Нужно для души, хочу стать спецом, я вообще-то экономист, мне программирование по профессии не нужно, а для души само то=)." писал(а):Ну ты даёшь задачки! А зачем тебе это нужно? Какая хоть задача стоит?
Всё не знает никто, но важно найти того кто знает нужное...
Его надо тогда вытащить из ресурсов, запихать в файл где-нить в темпе и выполнить - если только так.
It's a long way to the top if you wanna rock'n'roll
- Сейчас_не_спящий
- Сообщения: 46
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Это как? Ты имеешь в виду запихать в память как обчный строковый файл? Или?.." писал(а):Его надо тогда вытащить из ресурсов, запихать в файл где-нить в темпе и выполнить - если только так.
Всё не знает никто, но важно найти того кто знает нужное...
КоллегаСейчас_не_спящий писал(а):Нужно для души, хочу стать спецом, я вообще-то экономист, мне программирование по профессии не нужно, а для души само то=).

Внедрить в ресурсы можно все, что угодно.
Открывай ресурс-эдитором *.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]
С уважением, Lost Angel...
- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Вот кусок кода используемый мною в различных целях вызова внешних exe-шников:
где Command - есть выполняемая строка, может быть с параметрами и без
Код: Выделить всё
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;