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

Учимся делать Autorun на Delphi

Сейчас мы напишем авторан для CD/DVD дисков.
🕛 17.04.2010, 20:07
Это тебе может пригодиться для сбора собственного диска с софтом, с фильмами, с музыкой, да с чем угодно. Тем паче, мы научимся запускать файлы и программы из Delphi-приложения. Это возможно сделать несколькими способами. Однако я покажу тебе лишь 1 - при помощи WINAPI, т.к. он более универсальный и весьма лёгкий.

Итак, создавай новый проект, как это делается я думаю, ты уже знаешь =) В разделе uses добавляй SHELLAPI (именно в этом модуле располагается функция). Кидай на фому 3 кнопки, ну и одну картинку для красоты. Назови кнопки вот так - "Установка", "Запуск", "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: Определяет имя файла или папки для открытия или печатания. Вот этот параметр интересует нас более в общей сложности. Тут указываем, который файл\папку\программу мы желаем открыть. К примеру, нажатием II кнопки мы запускаем калькулятор.

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, значит, произошла ошибка. Вот основные возвращаемые ошибки:

- Системе не достаточно памяти, выполняемый файл испорчен или нехватает ресурсов.
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

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

Pascal и Delphi   Теги: Delphi

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