Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

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

Пользователь


Сообщения: 117
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 20:41, 21-08-2015

 

Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


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, 24-08-2015 в 19:15. Причина: Добавил обработку ошибок

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:17, 22-08-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


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

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 24-08-2015 в 18:42.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:32, 24-08-2015 | #3


Пользователь


Сообщения: 117
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:20, 24-08-2015 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] запуск программы с параметрами и ожидание ее закрытия

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Запуск программы с параметрами Yo Den Скриптовые языки администрирования Windows 8 15-06-2014 06:50
Запуск программы с параметрами Rulezzz2 AutoIt 8 31-03-2013 05:16
CMD/BAT - [решено] Запуск программы с параметрами art.andr Скриптовые языки администрирования Windows 5 27-07-2012 16:18
CMD/BAT - [решено] Запуск программы с разными параметрами root221 Скриптовые языки администрирования Windows 8 02-02-2012 19:58
CMD/BAT - [решено] Запуск программы с ее ключами volk1234 Скриптовые языки администрирования Windows 4 18-01-2010 19:13




 
Переход