Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как запустить приложение и подождать пока оно отработает 8

Delphi , Программа и Интерфейс , Приложения чужие



Автор: Elena_tark
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Дождаться завершение внешнего приложения

Дожидается завершения внешнего процесса

Зависимости: shellAPI
Автор:       elena_tark, elena_tark@freemail.ru, Калуга
Copyright:   Собственное
Дата:        1 августа 2003 г.
***************************************************** }

procedure ShellExec(Sender: TObject);
var
  ProcInfo: PShellExecuteInfo;
begin
  (Sender as TControl).Enabled := False;
  GetMem(ProcInfo, SizeOf(ProcInfo^));
  with ProcInfo^ do
  begin
    Wnd := Handle;
    cbSize := SizeOf(ProcInfo^);
    lpFile := PChar('notepad.exe');
    lpParameters := nil;
    lpVerb := 'open';
    nShow := SW_SHOW;
    fMask := SEE_MASK_DOENVSUBST or SEE_MASK_NOCLOSEPROCESS;
  end;
  try
    Win32check(ShellExecuteEx(ProcInfo));
    while not Application.Terminated and
      (WaitForSingleObject(ProcInfo.hProcess, 100) = WAIT_TIMEOUT) do
      Application.ProcessMessages;
  finally
    if ProcInfo.hProcess <> 0 then
      CloseHandle(ProcInfo.hProcess);
    Dispose(ProcInfo);
    (Sender as TControl).Enabled := True;
  end;
end;

Программный код на языке Delphi, демонстрирующий выполнение внешней приложения (в этом случае, Notepad.exe) и ожидание его завершения работы. Вот разбивка кода:

Инициализация Процедура ShellExec объявлена с параметром Sender: TObject, что является общей практикой в Delphi при создании обработчиков событий.

Размещение памяти Пойnter к структуре PShellExecuteInfo (Windows API) выделяется функцией GetMem. Эта структура будет хранить информацию о внешнем приложении, которое будет выполнено.

Настройка информации о shell-выполнении Блок with ProcInfo^ do настраивает поля структуре ProcInfo:

  • Wnd: Устанавливает handle окна для операции shell-выполнения.
  • cbSize: Определяет размер структуры ProcInfo.
  • lpFile: Определяет исполняемый файл, который будет запущен (в этом случае, Notepad.exe).
  • lpParameters: Устанавливается в nil, потому что в этом примере неNeeded параметры.
  • lpVerb: Устанавливает верб для операции shell-выполнения (в этом случае, "open").
  • nShow: Определяет, как приложение должно быть отображено при запуске (в этом случае, SW_ SHOW означает, что оно будет отображаться с его default window style).
  • fMask: Определяет различные флаги для управления выполнением внешнего приложения:
    • SEE_ MASK_DOENVSUBST: Включает подстановку переменных среды.
    • SEE_ MASK_NOCLOSEPROCESS: Прерывает закрытие процесса, когда операция shell-выполнения будет завершена.

Выполнение операции shell-выполнения Функция Win32check используется для вызова функции ShellExecuteEx, которая выполняет внешнее приложение. Структура ProcInfo передается в качестве параметра.

Ожидание завершения внешнего приложения Цикл while используется для ожидания завершения внешнего приложения. Цикл проверяет два условия:

  • Application.Terminated: Если приложение было прервано (например, из-за исключения), цикл будет выйти.
  • WaitForSingleObject(ProcInfo.hProcess, 100) = WAIT_TIMEOUT: Функция ожидает завершения процесса или наступления таймаута. Поле hProcess структуры ProcInfo содержит handle внешнего приложения'а. Если процесс все еще работает после 100 миллисекунд (установленного таймаута), цикл продолжится.

Освобождение ресурсов В блоке finally код:

  • Освобождает handle внешнего приложения'а процесса функцией CloseHandle.
  • Освобождает структуру ProcInfo функцией Dispose.
  • Включает управление, которое инициировало эту процедуру (предполагается, что оно было отключено ранее). В целом, этот код демонстрирует, как выполнить внешнее приложение и ожидать его завершения работы в приложении Delphi.

В статье описывается создание процедуры ShellExec в Delphi, которая запускает внешнее приложение и блокирует выполнение программы до тех пор, пока это приложение не будет закрыто.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Приложения чужие ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-05-01 12:59:01/0.0033519268035889/0