380________________________________________________Глава i

Параметр CmdLine является указателем на строку с нулевым символом в кон
це, содержащую имя выполняемого файла и, если необходимо, параметры комав
дной строки. Если имя файла указано без пути, то Windows будет искать выполня-
емый файл в каталогах в следующей последовательности:                   |

1. Каталог, из которого загружено приложение,                           t

2. Текущий каталог,                                                    j

3. Системный каталог Windows, возвращаемый функцией GetSystemDirectory.

4. Каталог Windows, возвращаемый функцией GetWindowsDirectory.1

5. Список каталогов из переменной окружения PATH.

Параметр CmdShow определяет форму представления окна запускаемого при-
ложения Windows. Возможные значения этого параметра см. в главе 14 в разделе
14.14.3.2. Чаще всего используется значение SW_RESTORE, при котором окно
запускаемого приложения активизируется и отображается на экране. Если это
окно в данный момент свернуто или развернуто, то оно восстанавливается до своих
первоначальных размеров и отображается в первоначальной позиции. Для прило-
жений не Windows, для файлов PIF и т.д. состояние окна определяет само прило-
жение.

При успешном выполнении запуска приложения функция WinExec возвраща-
ет значение, большее 31. При неудаче могут возвращаться следующие значения:

| Значение                  Номер Описание

О                            0      Не хватает памяти или ресурсов системы

ERROR_BAD_FORMAT      11    Ошибочный файл .ехе (например, не

__________________________для Win32 .ЕХЕ)_______________

ERROR_FILE_NOT_FOUND 2     Указанный файл не найден
ERROR_PATH_NOT_FOUND 3____Указанный каталог не найден______

Достоинством функции WinExec является ее совместимость с ранними верси-
ями Windows. Собственно для этого она и сохраняется в Win32, хотя для Win32
рекомендуется пользоваться функцией CreateProcess (об этой функции см. встро-
енную в C++Builder справку).

Приведем примеры применения WinExec.

Оператор

WinExec("file.ехе",SW_RESTORE) ;

запускает программу file.ехе. Оператор

WinExec("ПС",SW_RESTORE) ;

запускает Norton Commander. Оператор

WinExec("COMMAND.СОМ",SW_RESTORE) ;

приводит к запуску MS-DOS.
Операторы

int i = WinExec(Editl->Text.c_str(),SW_RESTORE);

if (i < 32)
ShowMessage("Код ошибки "+ IntToStr(i) ) ;

обеспечивают выполнение любой программы, имя которой пользователь набрал в
окне редактирования Editl. Поскольку первый параметр функции должен иметь
тип (char *), а текст окна имеет тип AnsiString, то для приведения типов прихо-
дится использовать метод .c_str().