Склейка двух файлов с помощью Delphi

Предыдущие сообщения
29 мая 2012
#1 MyP3uk uid#1395 Смотрю наш форум чего-то сегодня спит, за весь день несколько новых постов и то весь флуд :)
Ну дабы разнообразить и рассеять данный процесс решил написать небольшую статейку, долго думать не пришлось на какую из тем писать так как сейчас на одном чатике увидел вопрос про склейку исполняемых файлов. Я конечно сначала хотел послать парня в ГугОль, но потом подумал и решил расписать ему мозгоёбскую умную технологию склейки. Не пугайтесь вида кода, а то все почему то сразу как только видят исходный код закрывают страницу в судорожном движении и потом боятся туда снова зайти :D... Ну это всё предисловие, начём.
Например, нам нужно склеить два файла, пусть они будут называться prog1 и prog2.
Для начала следует создать файл ресусов - RC. Для этого создаём файл resource с разрешением rc. В папку с файлом кидаем нашу подопытную программу под первым номером. И пишем в наш пустой файл следующие строки:
TESTFILE EXEFILE01 prog1.exe

Теперь нам следует создать батник в этой директории и прописать там

brcc32.exe resourse.rc

Если всё сделал правильно и нигде не напортачил, то в нашей рабочей директории должен появится файл resource.res. Если вы его видите то можно продолжать ;)
Проделываем тот же самый процесс со вторым файлом, но в файле resouce.rc (Его создаём заново) изменяем EXEFILE01 на EXEFILE02, строки должны выглядеть следующим образом:

TESTFILE EXEFILE02 prog2.exe

Не забываем про батник, он остаётся статическим.
Ну если и после этого шага у нас образовался RES-файл, то стоит задуматься о прямоте ваших рук ;) Переименовываем наши RES-файлы, чтоб они смогли лежать в одной директории, например пусть будут RESFILE1 и RESFILE2.
Далее открываем борланд любой версии и пишем примерно так:
{$R RESFILE1.RES}
{$R RESFILE2.RES}

Теперь ищем папку нашего проекта и кидаем туда наши файлы из "лабораторной" папки и клеите наши RES'ы к проекту.
Далее просто создаём функцию ExtractRes:

function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var 
  Res: TResourceStream; 
begin
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType)); 
  try
    Res.SavetoFile(ResNewName);
  finally 
    Res.Free; 
  end;
end;

Но теперь нам как-то нужно же и запустить эти файлы :D
Для этого прописываем в uses ShellAPI. Вставляем в обработчик, например в OnCreate для формы, следующий код:

ExtractRes('EXEFILE01', 'TESTFILE', 'prog1.exe');
ExtractRes('EXEFILE02', 'TESTFILE', 'prog2.exe');
ShellExecute(handle, 'open', 'prog1.exe', nil, nil, SW_HIDE) ;
ShellExecute(handle, 'open', 'prog2.exe', nil, nil, SW_HIDE) ;

Можно так же распаковать наши файлы в какую-нибудь папку, например:

ExtractRes('EXEFILE01', 'TESTFILE', 'C:\WINDOWS\
cursors\prog1.exe');
ShellExecute(handle, 'open', 'C:\WINDOWS\cursors\prog2.exe', nil, nil, SW_HIDE);

Так файлы будут запускаться менее палевно ;)
Чтоб было удобно работать с файлом в дальнейшем, можно спрятать форму:
Application.ShowMainForm := False;

Вот и всё :)
Компилируем нашу программу, цепляем к ней иконку и делайте с ней что хотите. Как видите это совсем не сложно ;)
copyright MyP3uk 2012
22:39:25 5
#2сообщение удалено
#3сообщение удалено
Следующие сообщения
*Ник: Проверка уникальности... Если вы уже зарегистрированы, авторизуйтесь.
*Сообщение:
  Загрузка...