Ожидание завершения процесса windows в delphi
Иногда в приложении требуется запустить дочернее приложение, либо открыть файл, стандартным методом windows, в таком случае к нам на помощь приходит функция ShellExecute из shellApi. Но бывают ситуации когда требуется не просто запустить дочерний процесс на выполнения, но и дождаться его завершения. Здесь нам потребуется воспользоваться функцией CreateProcess из модуля Windows. Функция имеет 10 параметров, один из которых возвращает информацию о созданном процессе. Основными параметрами являются имя приложения которое требуется запустить, параметры его командной строки, а так же структура для получения информации о процессе. Остальные параметры используются для установки дополнительных опций запуска приложения. Нам поднадобятся две структуры si : TStartupInfo и pi : TProcessInfo. первая описывает дополнительные параметры запуска приложения, вторая получает данные по процессе. После завершения работы дочернего процесса обработчики из pi дожны быть закрыты с помощью closeHandle(). итак код для запуска процесса, и ожидания его завершения получается такой:
program WaitForProcess; {$APPTYPE CONSOLE} uses windows; var si : TStartupInfo; pi : TProcessInformation; cmdLine : pChar; app : pChar; begin zeroMemory(@si,sizeof(si)); si.cb := sizeof(si); zeroMemory(@pi,sizeof(pi)); cmdLine := 0; app := 'c:\windows\system32\notepad.exe'; if not CreateProcess(app,cmdLine,nil,nil,false,0,nil,nil,si,pi ) then begin writeln('fail to create process'); end else begin writeln('process started'); waitForSingleObject(pi.hProcess,INFINITE); writeln('process closed'); closehandle(pi.hProcess); closeHandle(pi.hThread); end; readln; end.
с помощью параметра dwCreationFlags можно управлять приоритетом создаваемого процесса, параметр lpEnvironment может указать специфические переменные среды для процесса если это требуется, параметр lpCurrentDirectory используется для указания текущей рабочей директории приложения. Структура si : TStartupInfo используется для указания таких специфичных параметров запуска как например отображение окна процесса, задания координат и размера окна процесса, настроек окна, если запускается консольное приложение, переключения стандартных потоков ввода и вывода.
16.11.2010 в 21:02
03.03.2016 в 10:39