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

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

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

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


procedure TForm1.Button3Click(Sender: TObject);
var
  si: STARTUPINFO;
  pi: PROCESS_INFORMATION;
  cmdline: string;
begin
  ZeroMemory(@si,sizeof(si));
  si.cb:=SizeOf(si);
  cmdline:='c:\command.com';
  if not CreateProcess( nil, { No module name (use command line). }
  PChar(cmdline),            { Command line. }
  nil,                       { Process handle not inheritable. }
  nil,                       { Thread handle not inheritable. }
  False,                     { Set handle inheritance to FALSE. }
  0,                         { No creation flags. }
  nil,                       { Use parent's environment block. }
  nil,                       { Use parent's starting directory. }
  si,                        { Pointer to STARTUPINFO structure. }
  pi )                       { Pointer to PROCESS_INFORMATION structure. }
  then
  begin
  ShowMessage( 'CreateProcess failed.' );
  Exit;
  end;
  WaitForSingleObject( pi.hProcess, INFINITE );
  CloseHandle( pi.hProcess );
  CloseHandle( pi.hThread );
  ShowMessage('Done !');
end;

Программный код, предоставленный ниже, является частью приложения Delphi, которое запускает новый процесс и ожидает его завершения. Вот шаги для запуска приложения и ожидания завершения процесса:

  1. Откройте свой IDE Delphi и загрузите проект, содержащий этот код.
  2. Запустите приложение, нажав на кнопку "Запустить" или нажав F9.
  3. Когда приложение запущено, нажмите на кнопку, помеченную как "Button3".
  4. Код внутри события обработчика Button3Click будет выполнен.

Вот, что код делает:

  1. Определяет локальную переменную si типа STARTUPINFO и инициализирует ее в нулевое значение с помощью функции ZeroMemory.
  2. Устанавливает поле cb структуры si размером структуры STARTUPINFO.
  3. Устанавливает командную строку для нового процесса на 'c:\command.com'.
  4. Вызывает функцию CreateProcess, чтобы создать новый процесс с указанной командной строкой и ожидать его завершения.
  5. Если CreateProcess fails, отображается сообщение об ошибке и приложение заканчивается.
  6. Когда процесс будет выполнен, освобождает любые системные ресурсы, выделенные процессом с помощью функции CloseHandle.
  7. Наконец, отображается сообщение "Done!" для указания, что процесс был выполнен.

Примечание: файл command.com - это интерпретатор команд MS-DOS и используется в примере в этом коде. В реальном приложении вы обычно используете более значимый исполняемый файл или файл batch как командную строку.

Альтернативное решение:

Если вам нужно ожидать завершения процесса без блокировки основного потока вашего приложения Delphi, вы можете использовать класс TThread и создавать новый поток, который запускает команду. Этот подход позволяет вашему приложению оставаться ответственным, пока процесс не будет выполнен.

Вот пример:

procedure TForm1.Button3Click(Sender: TObject);
var
  si: STARTUPINFO;
  pi: PROCESS_INFORMATION;
  cmdline: string;
begin
   // Создайте новый поток, который запускает команду
  TThread.CreateAnonymousThread(
    procedure
    var
      hProcess: THandle;
      hThread: THandle;
    begin
       // Установите структуру STARTUPINFO
      ZeroMemory(@si, sizeof(si));
      si.cb := SizeOf(si);

       // Установите командную строку для нового процесса
      cmdline := 'c:\command.com';

       // Создайте новый процесс
      if not CreateProcess(nil, PChar(cmdline), nil, nil, False, 0, nil, nil, si, pi) then
      begin
        ShowMessage('CreateProcess failed.');
        Exit;
      end;

       // Ожидайте завершения процесса
      WaitForSingleObject(pi.hProcess, INFINITE);

       // Освободите любые системные ресурсы, выделенные процессом
      CloseHandle(pi.hProcess);
      CloseHandle(pi.hThread);
    end).Start;
end;

В этом примере создается новый поток с помощью TThread.CreateAnonymousThread, который запускает команду, указанную в переменной cmdline. Основной поток вашего приложения остается свободен для продолжения выполнения других кода, пока процесс не будет выполнен.

В статье описывается как запустить приложение в Delphi с помощью процедуры CreateProcess и подождать пока оно отработает, используя функцию WaitForSingleObject.


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

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




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


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


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-29 08:57:18/0.0035219192504883/0