Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

Ответить
Аватара пользователя
muslimdogger

Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

Сообщение muslimdogger »

при втором условии ожидается код на запуск exe c параметрами, понял что нужно делать через CreateProcess, но никак не могу написать это. не могли бы вы помочь?
Аватара пользователя
opel431

Re: Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

Сообщение opel431 »

CreateProcess, - можно так






Код:

Код: Выделить всё

function ExecAndWait(const aFilename: string; const AParams: string = ''; const AWndState:
  Boolean = False; const ADir: string = ''): Boolean;
var
  StartInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  FillChar(StartInfo, SizeOf(StartInfo), 0);
  FillChar(ProcInfo, SizeOf(ProcInfo), 0);
  StartInfo.cb := SizeOf(StartInfo);
  // показывать окно используя настройки параметра wShowWindow и курсор в форме песочных часов 2 секунды
  StartInfo.dwFlags := STARTF_USESHOWWINDOW or STARTF_FORCEONFEEDBACK;
  // отображение окна выполнения
  if AWndState = True then
    StartInfo.wShowWindow := SW_SHOWNORMAL
  else
    StartInfo.wShowWindow := SW_HIDE;
  // форматирование командной строки с обрамлением двойными кавычками имени файла
  CmdLine := Format('"%s" %s', [aFilename, AParams]);
  // после вызова процедуры на строку CmdLine будет ссылаться только один указатель
  {$IFDEF UNICODE}
  UniqueString(CmdLine); // передаем CmdLine как уникальную строку
  {$ENDIF}
  //** обрабатывать ошибки вызова функции (Win32Check)
  {$WARN SYMBOL_PLATFORM OFF}
  result := Win32Check(CreateProcessW(PChar(aFilename), PChar(CmdLine), nil, nil, False,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ADir), StartInfo, ProcInfo));
  {$WARN SYMBOL_PLATFORM ON}
  if result then
  begin
    while WaitForSingleObject(ProcInfo.hProcess, 100)  WAIT_OBJECT_0 do
      Application.ProcessMessages;
    //** обрабатывать ошибки вызова функции (Win32Check)
    {$WARN SYMBOL_PLATFORM OFF}
    Win32Check(CloseHandle(ProcInfo.hProcess));
    Win32Check(CloseHandle(ProcInfo.hThread));
    {$WARN SYMBOL_PLATFORM ON}
  end;
end;
  {** функция Win32Check конвертирует код ошибки в исключение. Т.е. при возбуждение
  исключения код дальше будет пропущен, а управление будет передано на ближайший обработчик
  ошибок, по умолчанию это объект Application. Функцию обернем директивой ($WARN SYMBOL_PLATFORM)
  для подавления сообщения о специфической платформе этой функции}
Аватара пользователя
opel431

Re: Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

Сообщение opel431 »

В код добавлена обработка ошибок при вызове функции.

По большому счету, необходимо еще две функции - проверять валидность имени файла и получение полного пути к текущему командному процессору!

Да, в наше время с детства учили быть вежливыми, в части Спасибо и Пожалуйста!
Аватара пользователя
muslimdogger

Re: Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

Сообщение muslimdogger »

opel431 спасибо за то что отозвались. я в тему давно не заглядывал, тк отметил ее решенной и забыл
Ответить

Вернуться в «Программирование и базы данных»