Иногда из программы на Delphi требуется запустить другую программу. Для этого есть два способа и оба используют API-функции. Первый способ использует функцию API-функцию WinExec, а второй - ShellExecute. Посмотрим на применение этих функций в деле.
Сначала используем функцию ShellExecute. Для нее пример достаточно распространенный - мы сделаем гиперссылку на форме. Щелкаешь на ней - и оказываешься на некотором сайте. Часто такую ссылку можно видеть в окошке About. Для использования функции ShellExecute прежде всего добавляем ShellAPI в секцию uses нашего кода (иначе компилятор ругнется на эту функцию):
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ShellAPI;
Далее помещаем на форме Label, и делаем в нем надпись синей и подчеркнутой (как это и принято для гиперссылки). Делаем двойной щелчок мышью на нашем Label1 для перехода в окно кода. В обработчике пишем следующий код:
... procedure TForm1.Label1Click(Sender: TObject); begin ShellExecute(Form1.Handle, 'open', 'http://progs.biz', nil, nil, SW_SHOWNORMAL) end; ...
Запускаем программу, щелкаем на нашей гиперссылке и оказываем на сайте alexeev.nm.ru. Все как и ожидалось.
Рассмотрим параметры нашей функции более подробно.
Первый параметр (Form1.Handle у нас) - это указатель на окно, из которого запускается другое приложение.
Второй параметр (у нас это open) - показывает, что мы делаем. Значение open для него - самое распространенное. Еще из распространенных значений этот параметр может принимать print (для печати, естественно) и nil (которое фактически тоже самое, что и open).
Третий параметр - это что мы, собственно открываем (печатаем и т. д.). Он может быть как именем конкретного exe-шника (например, notepad.exe), так и именем документа (например, test.doc. В этом случае запустится приложение, ассоциированное с файлом открываемого типа (для *.doc - Word и т. д.)). Третье значение для рассматриваемого параметра - это имя папки (например, D:\Delphi).
Четвертый параметр (у нас он nil) - это параметры для запускаемого exe-файла (который должен стоять третьим параметром). Например, сюда можно написать, что за файл мы хотим открыть в Блокноте:
... ShellExecute(Form1.Handle, 'open', 'notepad.exe', 'D:\test.txt', nil, SW_SHOWNORMAL) ...
Откроется файл test.txt на диске D:, как и ожидается.
Остальные параметры не столь важны, так что если интересно, то смотрите в help'е.
Что же до функции WinExec, то она оставлена только для совместимости. Вот пример ее применения:
... WinExec('notepad.exe',SW_SHOWNORMAL) ...
Указанный фрагмент запустит Блокнот.