Запуск внешнего приложения и ожидание его завершения
Автор: Fabrнcio Fadel Kammer
www.исходники.ru
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.
Оставить комментарий
Комментарии
1.
+3 / -1
31 марта 2013, 07:40:47
В 7 работает только надо заменить:
cb := SizeOf(SUInfo); -> cb := SizeOf(StartInfo);
SH_SHOWNORMAL -> SW_SHOWNORMAL
cb := SizeOf(SUInfo); -> cb := SizeOf(StartInfo);
SH_SHOWNORMAL -> SW_SHOWNORMAL
2.
+3 / -2
23 августа 2005, 14:35:54
ошибка!
следует заменить строку
cb := SizeOf(SUInfo);
на
cb := SizeOf(StartInfo);
следует заменить строку
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)
must be
ExecAndWait( 'C:\\windows\\calc.exe', '', SW_SHOWNORMAL)
4.
+1 / -2
8 июня 2005, 19:20:47
А как сделать чтоб при запуске процесса основная форма оставалась активной (т.е процесс уходил в фон но получить в цикл сигнал об отработке проги?)