Взаимодействие приложения с внешними программами_______________381

В заключение приведем пример процедуры, обеспечивающей выполнение лю-
бой выбранной пользователем программы. Откройте новый проект и разместите на
форме компонент OpenDialog, задав в нем фильтр

программы                                       *.ехе;*. corn;*, pit;*, dat
все файлы                                       *.*

Разместите на форме кнопку Button (назовите ее ВЕхес), при щелчке на кото-
рой пользователь может выбрать в окне Открыть файл программу и выполнить ее.
Обработчик события OnClick этой кнопки может иметь вид:

if (OpenDialogl->Execute())
{

int i = WinExec(OpenDialogl->FileName.c_str(),SW_RESTORE);

switch (i)
(
case 0:ShowMessage("He хватает памяти или ресурсов");

break;

case ERROR_BAD_FORMAT:

ShowMessage("Ошибочный файл " + OpenDialogl->FiieName);

breaks-
case ERROR_PATH_NOT_FOUND:

ShowMessage("He найден каталог " +

ExtractFilePath(OpenDialogl->FileName)) ;

break;

case ERROR_FILE_NOT_FOUND:

ShowMessage("He найден файл " + OpenDialogl->FileName) ;

}
}

Запустите ваше приложение на выполнение и попробуйте вызывать из него
различные программы Windows и MS-DOS.

6.1.4 Запуск внешней программы и открытие документа
функцией ShellExecute

Более широкие возможности по сравнению с функцией WinExec предоставля-
ет функция ShellExecute. Она может не только выполнять заданное приложение,
но и открывать документ и печатать его. Под термином «открыть файл документа»
понимается выполнение связанного с ним приложения и загрузка в него этого до-
кумента. Например, обычно с документами, имеющими расширение .doc, связан
Word. В этом случае открыть файл, например, с именем file.doc означает запус-
тить Word и передать ему в качестве параметра имя файла file.doc. Кроме описан-
ных возможностей функция ShellExecute позволяет открыть указанную папку.
Это означает, что будет запущена программа «Проводник» с открытой указанной
папкой.

Для использования функции ShellExecute в модуль надо добавить директиву
препроцессора

ttinclude "ShellAPl.h"

подключающую модуль ShellAPI, в котором описана функция. Автоматически
C++Builder эту директиву не добавляет.

Функция ShellExecute инкапсулирует одноименную функцию API Windows и
определена следующим образом:

void ShellExecute(HWnd Wnd, const char * Operation,

const char *FileName, const char *Parameters,
const char *Directory, unsigned int ShowCmd);