Часть урока для продвинутых программистов
Запуск других приложений из вашего
Существует две наиболее часто применяемых функций. WinExec и ShellExecute.
Функция WinExec
WinExec, оставлена для совместимости с ранними версиями Windows, но я рекомендую для обычного запуска программы с командной строкой использовать эту. У нее мало параметров запуска.
Используемый модуль – Windows.
Описание: WinExec (FileName: PChar; CmdShow: Cardinal) : Cardinal;
где: FileName – путь, имя запускаемого приложения, параметры командной строки. Все указывается в одной строке;
CmdShow – стиль окна. Показывает, в каком состоянии будет отображаться окно при запуске.
Параметры отображения окна CmdShow:
| SW_HIDE
|
| Запускаемое приложение делается невидимым
|
|
| SW_MAXIMIZE
|
| Расширяет окно на весь экран
|
|
| SW_MINIMIZE
|
| Запускаемое приложение минимизируется. После запуска активизируется окно высшего уровня, т.е. окно, откуда было запущено это приложение
|
|
| SW_RESTORE
|
| Делает окно таким, каким оно было запущено в последний раз
|
|
| SW_SHOW
|
| Отображает окно в своем текущем размере и позиции
|
|
Для не-Windows приложений определяет состояние окна файл PIF, если таковой имеется в наличии. Если необходимо закрывать окно после завершения работы такого приложения необходимо создать PIF ярлык к нему в том же каталоге с таким же названием и поставить галочку "Закрывать окно по завершению сеанса работы". Все дополнительные параметры запуска устанавливаются там же.
Возвращаемые значения функции WinExec:
| 31
|
| нормальный запуск
|
|
| 0
|
| системе не хватает памяти или ресурсов
|
|
| ERROR_BAD_FORMAT
|
| EXE файл поврежден или имеет неверный формат (Windows на такой файл говорит, что он не является приложением Win32)
|
|
| ERROR_FILE_NOT_FOUND
|
| файл не найден
|
|
| ERROR_PATH_NOT_FOUND
|
| путь к файлу задан неверно
|
|
Если имя выполняемого файла в параметре FileName не содержит пути директории, Windows производит поиск выполняемого файла в такой последовательности:
1. Каталог из которого приложение было запущено. Это рабочий каталог
2. Системный каталог Windows (обычно C:\WINDOWS\SYSTEM).
3. Каталог Windows.
4. Директории, указанные в переменной операционной среды в среде PATH. Узнать о каталогах этой переменной можно, введя PATH в командной строке сеанса MS-DOS.
Пример использования функции WinExec в программе:
WinExec ('command.com', SW_SHOW); // запускает сеанс MS-DOS
Функция ShellExecute
Функция ShellExecute не только запускает программы, а открывает, редактирует или печатает файл, с учетом зарегестрированного типа, а также открывает указанную папку проводником. Возвращает Handle ссылку на открытое окно.
Используемый модуль ShellAPI. Его нужно не забыть указать в разделе Uses.
Описание: ShellExecute (hWnd: HWND; Operation: PChar; FileName: PChar; Parametrs: PChar; Directory: PChar; CmdShow: Integer): HINST;
где: hWnd – Handle родительского окна, в который будут передаваться сообщения запускаемого приложения. Можно указывать Handle-ссылку окна вашего приложения.
Operation – производимая операция.
Open
– открыть,
print – напечатать,
explore – открыть папку. По умолчанию
open, если указать
nil.
FileName – имя файла или документа, интернет ссылка, e-mail адрес.
Parametrs – параметры, передаваемые приложению в командной строке.
Directory – каталог по умолчанию.
CmdShow – стиль окна. Показывает, в каком состоянии будет отображаться окно при запуске. Подробно рассказано выше.
Вместо параметров Operation, Parametrs и Directory можно ставить
nil. Они являются не обязательными параметрами для запуска.
В случае успешного запуска возвращает Handle окна, в случае неудачи возвращает код ошибки меньше или равное 32. Список возможных ошибок можно прочитать в справке по этой команде.
Пример использования команды ShellExecute в программе:
ShellExecute (Form1.Handle, nil, 'http://programming.dax.ru', nil, nil, SW_RESTORE); //запуск нашей странички
ShellExecute (Form1.Handle, nil, PChar (Application.ExeName), nil, nil, SW_RESTORE); //запуск второй копии этой программы
ShellExecute (Form1.Handle, nil, 'iexplore', 'http://programming.dax.ru', nil, SW_RESTORE); //запуск в отдельном окне
ShellExecute (Form1.Handle, nil, 'mailto:semen@krovatka.net?subject=delphi', nil, nil, SW_RESTORE); //написать мне письмо
ShellExecute (Form1.Handle, nil, 'c:\1.doc', nil, nil, SW_RESTORE); //открыть документ
С уважением, ведущий уроков Semen
semen@krovatka.net