{ **** UBPFD *********** by delphibase.endimus.com ****
>> Запуск программы и ожидание ее завершения.
Функция запускает внешнюю программу, заданную параметром Path, и ждет ее завершения.
Во время выполнения внешней программы, текущее приложение скрывается (
т.к. не может перерисовать главное окно, что некрасиво), поэтому фактически
происходит переключение с текущей программы на внешнюю и,
после завершения внешней программы, обратно.
В качестве внешней программы может выступать любой выполняемый файл (EXE, COM, BAT, SCR).
Зависимости: Windows, Forms
Автор: Евгений Валяев (RhinoFC), rhinofc@sniiggims.ru, ICQ:55263922, Новосибирск
Copyright: RhinoFC
Дата: 5 июня 2002 г.
***************************************************** }function SwitchToProg(const Path: string): Boolean;
var
SI: TStartupInfo;
PI: TProcessInformation;
ExitCode: Cardinal;
begin
FillChar(SI, SizeOf(SI), 0);
SI.cb := SizeOf(SI);
Result := CreateProcess(nil, PChar(Path), nil, nil, False, 0, nil, nil,
SI, PI);
if Result thenbegin
Application.MainForm.Hide;
while GetExitCodeProcess(PI.hProcess, ExitCode) and
(ExitCode = STILL_ACTIVE) do
; // ждем завершения, пустой цикл
Application.MainForm.Show;
end;
end;
Код, предоставленный вами, - это функция Delphi, называемая SwitchToProg, которая запускает внешнюю программу, указанную параметром Path, и ожидает ее завершения. Вот подробное описание того, что код делает:
Он объявляет несколько переменных:
SI: переменная типа TStartupInfo, которая хранит информацию о процессе, который будет запущен.
PI: переменная типа TProcessInformation, которая хранит информацию о процессе, созданном.
ExitCode: переменная типа Cardinal, которая будет хранить код завершения внешней программы.
Он инициализирует переменную SI заполняя ее нулями и устанавливая ее размер равным размеру типа TStartupInfo.
Он вызывает функцию CreateProcess для запуска внешней программы, указанной параметром Path. Функция возвращает булевое значение, указывающее, успешно ли был создан процесс.
Если процесс был создан успешно, он скрывает основное окно текущего приложения с помощью Application.MainForm.Hide.
Затем он enters бесконечный цикл, который проверяет код завершения внешнего процесса с помощью GetExitCodeProcess. Цикл продолжается, пока код завершения не будет равен 0 (то есть процесс еще не был остановлен).
Когда внешняя программа будет выполнена, он снова покажет основное окно с помощью Application.MainForm.Show.
Чтобы использовать эту функцию, вы должны вызвать ее, передавая путь к внешнему исполняемому файлу как строковый параметр, например:
SwitchToProg('C:\Path\To\MyExecutable.exe');
Это запустит указанную программу и ожидает ее завершения.
Обратите внимание:
Код предполагает, что объект Application доступен в текущем scope. Если вы используете другую архитектуру приложений или фреймворк, вам может потребоваться изменить код соответствующим образом.
Функция CreateProcess используется для запуска внешней программы. Функция возвращает булевое значение, указывающее, успешно ли был создан процесс.
Функция GetExitCodeProcess используется для получения кода завершения внешнего процесса.
Цикл в коде бесконечен, что означает, что он блокирует выполнение текущего приложения до тех пор, пока внешняя программа не будет выполнена. Если вы хотите позволить другим задачам выполняться.concurrently, пока ожидается завершения внешней программы, вам может потребоваться изменить код с помощью таймера или другого механизма синхронизации.
Функция запускает внешнюю программу и ожидает ее завершения, скрывая при этом основное окно текущего приложения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS