Информационные технологииStfw.Ru 🔍

Autorun на Delphi.

напишем авторан для CD/DVD дисков
🕛 25.03.2008, 12:26
Сегодня мы напишем авторан для CD/DVD дисков. Это тебе может пригодиться для сбора своего диска с софтом, с фильмами, с музыкой, да с чем угодно. Тем более, мы научимся запускать файлы и программы из Delphi-приложения. Это можно сделать несколькими способами. Но я покажу тебе только один - с помощью WinAPI, т.к. он более универсальный и очень лёгкий.
Итак, создавай новый проект, как это делается я думаю ты уже знаешь =) В разделе uses добавляй ShellAPI (именно в этом модуле находится функция). Кидай на фому три кнопки, ну и одну картинку для красоты. Назови кнопки вот так - "Установка", "Запуск", "ReadME". Создай для каждой из них обработчик события OnClick. Теперь довади их до следующего этого вида :

procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(Handle, nil, '/setup.txt', nil, nil, SW_SHOW);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShellExecute(Handle, nil, 'calc.exe', nil, nil, SW_SHOW);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
ShellExecute(Handle, nil, '/ReadME.txt', nil, nil, SW_SHOW);
end;

Давай разберёмся, чё здесь написано? Как ты наверное уже заметил, в каждом обработчике мы используем одну и ту же функцию ShellExecute. Что это за функция? Эта функция может открыть или напечатать определенный файл. Т.е. например, с файлами типа ".mp3" у тебя связан Winamp "winamp.exe" и запуск файла "cool.mp3" приведет к тому, что будет запущен Winamp и в него будет передан параметр с именем файла., т.е. открыт файл "cool.mp3", и начнётся его воспроизведение.
Функция описана вот так :
function ShellExecute(hWnd: HWND; Operation, FileName, Parameters,Directory: PChar; ShowCmd: Integer): HINST;
Она имеет 6 параметров :

1.hWnd: Хендл родителя запускаемого приложения. Мы указали Handle, т.е. хендл своего приложения.
2.Operation: Строка определяющая команду для исполнения. Может содержать:
"open" - открыть файл определенный параметром FileName.
"print" - напечатать файл определенный параметром FileName.
"explore" - открыть папку определенную параметром FileName.
У нас этот параметр равен nil, значит по умолчанию выполнится операция "open".
3.FileName: Определяет имя файла или папки для открытия или печати. Вот этот параметр интересует нас больше всего. Здесь указываем какой файл\папку\программу мы хотим открыть. Например, нажатием второй кнопки мы запускаем калькулятор.
4.Parameters: определяет параметры передаваемые при запуске исполняемого приложения. При запуске документа его использовать не надо. Параметр можеть быть равен Nil, именно этому он у нас и равен. Потому что нам не надо каких-то дополнительных параметров.
5.Directory: опеределяет каталог по умолчанию (рабочий каталог). Получить\установить можно с помощью функций GetCurrentDirectory, SetCurrentDirectory. Если nil, то используется данный каталог. В нашем случае - это каталог, откуда запустилась наша прога.
6.ShowCmd: определяет режим открытия файла. Константа открытия\показа SW может быть равна :

SW_HIDE - Прячет окно и переводит в активное состояние другое окно.
SW_MINIMIZE - Минимизирует окно и активизирует окно верхнего уровня в списке менеджера окон.
SW_RESTORE - Действует так же, как и SW_SHOWNORMAL.
SW_SHOW - Активизирует окно и выводит его в текущей позиции и текущего размера.
SW_SHOWDEFAULT - Активизирует окно и выводит его с использованием текущих умолчаний.
SW_SHOWMAXIMIZED - Активизирует окно и выводит его с максимально размером.
SW_SHOWMINIMIZED - Активизирует окно и выводит его в виде пиктограммы.
SW_SHOWMINNOACTIVATE - Выводит окно как пиктограмму; бывшее активное в данный момент окно остается активным.
SW_SHOWNA - Выводит окно с учетом его состояния в данный момент; активное в данный момент окно остается активным.
SW_SHOWNOACTIVATE - Выводит окно в его прежней позиции и прежнего размера; активное в данный момент окно остаета активным.
SW_SHOWNORMAL - Активизирует окно и выводит его на экран. Если окно было увеличено или уменьшено до пиктограммы, то Windows восстановит начальное положение и размер окна.
SW_SHOWSMOOTH - Выводит окно так, чтобы оно меньше всего перекрывалось с другими окнами.

У нас эта константа равна SW_SHOW, потому что нам надо, чтобы фокус передался запускаемому окну.

Функция ShellExecute возвращает хендл открытого приложения. Если возвращаемое значение меньше 32, значит произошла ошибка. Вот основные возвращаемые ошибки :

0 - Системе не хватает памяти, выполняемый файл испорчен или нехватает ресурсов.
ERROR_FILE_NOT_FOUND - файл не найден.
ERROR_PATH_NOT_FOUND - путь не найден.
ERROR_BAD_FORMAT - .EXE-Файл неверен (не-Win32.EXE или ошибка в .EXE).
SE_ERR_ACCESSDENIED - ОС отвергла доступ к файлу.
SE_ERR_DLLNOTFOUND - динамическая библиотека(.DLL) не обнаружена.
SE_ERR_FNF - файл не найден.
SE_ERR_NOASSOC - нет приложения ассоцированного с данным типом файла.
SE_ERR_OOM - недостаточно памяти для завершения операции.
SE_ERR_PNF - путь не найден.

Ну вот и прога готова, можешь поиграться с ней. Теперь давай сделаем так, чтобы она запускалась автоматически с диска. Для этого создавай файл "autorun.ini" со следующим содержанием :

[autorun]
open=autorun.exe
icon=autorun.ico

В блоке всего две строки : "open=autorun.exe" - эта строка показывает, что запустить, "icon=autorun.ico" - эта строка показывает, какую сделать иконку диска. Ну вот и всё, авторан готов! Перемеиновывай прогу в "autorun.exe"и записывай на диск. Только не перепутай пути файлов!

Pascal и Delphi   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉