​​​​​Изучаем Delphi. Библиотека VCL
Урок 15. Запуск других приложений

Иногда из программы на 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)
  ...

Указанный фрагмент запустит Блокнот.

​​​​​