Delphi programming blog
Источник: http://teran.karelia.pro/articles/item_4410.html
 

Ожидание завершения процесса windows в delphi

Опубликовано 31.03.2010 г. 17:13

Иногда в приложении требуется запустить дочернее приложение, либо открыть файл, стандартным методом 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 используется для указания таких специфичных параметров запуска как например отображение окна процесса, задания координат и размера окна процесса, настроек окна, если запускается консольное приложение, переключения стандартных потоков ввода и вывода.

Метки:  api  |  windows  |  процессы 

Комментарии

Voldemar
16.11.2010 в 21:02
Сделал фронтенд, а он запустил сразу несколько приложений, но нужно по очереди, читая список! Пасибы, попробую использовать Ваш пример.
Mike
03.03.2016 в 10:39
Спасибо! Работает и в Embarcadero RAD Studio Delphi 10 Seattle...
- Имя
- e-mail*
- Сайт
вы можете использовать теги [i],[b],[code],[quote]
Дополнительно