Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11639
Последний выпуск: 19.06.2015

Запуск внешнего приложения и ожидание его завершения

Автор: Fabrнcio Fadel Kammer
www.исходники.ru

Пример показывает как из Вашей программы запустить внешнее приложение и подождать его завершения.

function ExecAndWait(const FileName,
                     Params: ShortString;
                     const WinState: Word): boolean; export; 
var 
  StartInfo: TStartupInfo; 
  ProcInfo: TProcessInformation; 
  CmdLine: ShortString; 
begin 
  { Помещаем имя файла между кавычками, с соблюдением всех пробелов в именах Win9x } 
  CmdLine := '"' + Filename + '" ' + Params; 
  FillChar(StartInfo, SizeOf(StartInfo), #0); 
  with StartInfo do 
  begin 
    cb := SizeOf(SUInfo); 
    dwFlags := STARTF_USESHOWWINDOW; 
    wShowWindow := WinState; 
  end; 
  Result := CreateProcess(nil, PChar( String( CmdLine ) ), nil, nil, false, 
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, 
                          PChar(ExtractFilePath(Filename)),StartInfo,ProcInfo); 
  { Ожидаем завершения приложения } 
  if Result then 
  begin 
    WaitForSingleObject(ProcInfo.hProcess, INFINITE); 
    { Free the Handles } 
    CloseHandle(ProcInfo.hProcess); 
    CloseHandle(ProcInfo.hThread); 
  end; 
end; 

А вот пример вызова этой функции:

ExecAndWait( 'C:\windows\calc.exe', '', SH_SHOWNORMAL) 
  • Параметр FileName = Имя внешней программы.
  • Параметр Params = Параметры, необходимые для запуска внешней программы
  • Параметр WinState = Указывает - как будет показано окно:
    Для этого параметра мы можем так же использовать следующие константы: SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_SHOWNORMAL

PS: Этот код тестировался в delphi версий 3, 4 и 5.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 

Комментарии

1.
90K
31 марта 2013 года
Денис Чернов
0 / / 31.03.2013
+3 / -1
Мне нравитсяМне не нравится
31 марта 2013, 07:40:47
В 7 работает только надо заменить:
cb := SizeOf(SUInfo); -> cb := SizeOf(StartInfo);
SH_SHOWNORMAL -> SW_SHOWNORMAL
2.
Аноним
+3 / -2
Мне нравитсяМне не нравится
23 августа 2005, 14:35:54
ошибка!
следует заменить строку
cb := SizeOf(SUInfo);
на
cb := SizeOf(StartInfo);
3.
Аноним
+2 / -1
Мне нравитсяМне не нравится
14 июня 2005, 00:35:33
ExecAndWait( 'C:\windows\calc.exe', '', SH_SHOWNORMAL)

must be

ExecAndWait( 'C:\\windows\\calc.exe', '', SW_SHOWNORMAL)
4.
Аноним
+1 / -2
Мне нравитсяМне не нравится
8 июня 2005, 19:20:47
А как сделать чтоб при запуске процесса основная форма оставалась активной (т.е процесс уходил в фон но получить в цикл сигнал об отработке проги?)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог