WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR lpCmdLine, int)




Try,

{

Application->Initialize ();

Appiication->CreateForm(__classid(Tform1)б &Form1);

Forml->Editl->Text =lpCmdLine; // Загрузка окна Editl

Application->Run();

}

catch (Exception &Sexception)

Application->ShowException (&exception);

}

return 0;

}

 

По сравнению со стандартным файлом, созданным C+ Builder, в него добавлено две строки (отмечены комментариями): директива, включающая заголовочный файл модуля UOverlayl.h, содержащего описание вашей формы Form1, и оператор, загружающий в окно Edit1 текст, переданный через командную строку. Еще одно изменение по сравнению со стандартным файлом — введение в заголовок функции WinMain параметра lpCmdLine — ссылки на командную строку. Если в файле приложения POverlay сделаны такие изменения, то в приложении OMenage второй вызои функции должен быть изменим на следующий:

spawnlp(P_OVERLAY, "P_OVERLAY.exe", "P_OVERLAY.exe", lpCmdLine, NULL);

Этот вызов отличается от того, что был раньше, передачей в программу той командной строки, которая была задана при вызове OMenage. Таким образом в программу POverlay вернется имя запускавшейся программы, которое будет загружено в окно Edit1.

 

 

Запуск внешней программы функцией WinExec

Функция WinExec, в отличие от описанных в предыдущих разделах, позволяет управлять формой представления окна запускаемого приложения. Эта функция может работать в любых версиях Windows и выполнять любые файлы: приоложения Windows, MS-DOS, файлы PIF и т.п. Функция WinExec определяется следующим образом:

 

int WinExec (const char *CmdLine, unsigned int CmdShow);

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

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

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

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

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

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

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

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

 

Значение Номер Описание
    Не хватает памяти или ресурсов системы
ERROR_BAD_FORMAT   Ошибочный файл.ехе (например, не для Win32.ЕХЕ
ERROR_FILE_NOT_FOUND   Указанный файл не найден
ERROR_PATH_NOT_FOUND   Указанный каталог не найден

 

Достонством функции WinExec является ее совместимость с ранними версиями Windows., хотя для Win32 рекомендуется пользоваться функцией CreateProсess, о которой мы еще будем говорить.

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

Оператор

 

WinЕхес ("file.exe", SW_RESTORE);

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

 

WinExec("nc",SW_RESTORE);

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

 

WinExec ("COMMAND.COM", SW_RESTORE);

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

 

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

if(i < 32)

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

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

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

программы *.exe;*.com;*.pif;*.dat
все файлы *.*

 

 

 

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

 

if (OpenDialog1->Execute ())

{

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

switch(i){

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

break;

case ERROR_BAD_FORMAT: ShowMessage("Ошибочный файл" +

OpenDialog1->FileName);

break;

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

ExtractFilePath(OpenDialog1->FileName));

break;

case ERROR_FILE_NOT_FOUND: ShowMessage("He найден файл" +

OpenDialog1->FileName);

}

}

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

 

 

Функция CrateProcess

Более современной, чем WinExee, является функция API Windows CreateProcess, которая и рекомендуется для 32-разрядных приложений. В C++Builder имеется несколько вариантов этой функции. Она подключается с помощью заголовочного файла winbase.h и объявлена следующим образом:

 

BOOL CreateProcess(



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: