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

Подождать завершения DOS-задачи 3

Delphi , ОС и Железо , DOS и Консоль

Подождать завершения DOS-задачи 3

Молодого программиста спрашивают: что ты, мол, подружку себе не заводишь? Пора бы уже.. Тот отвечает:
- Зачем, если есть компьютер?


function TForm1.StartWithShell(Prog, par, Verz: string;
var hProcess: THandle): DWord;
var
  exInfo: TShellExecuteInfo;
begin
  hProcess := 0;
  FillChar(exInfo, Sizeof(exInfo), 0);
  with exInfo do
  begin
    cbSize:= Sizeof(exInfo);
    fMask := SEE_MASK_NOCLOSEPROCESS or SEE_MASK_FLAG_DDEWAIT;
    Wnd := 0;
    lpVerb:= 'open';
    lpParameters := PChar(par);
    lpFile:= Pchar(prog);
    nShow := SW_HIDE;
  end;
  Result := ERROR_SUCCESS;
  if ShellExecuteEx(@exInfo) then
    hProcess := exinfo.hProcess
  else
    Result := GetLastError;
end;

function TForm1.StartProgramm : Boolean;
var
  r, ExitCode: DWord;
  err: string;
  hProcess: THandle;
begin
  Result := False;
  r := StartWithShell('rar.exe', , 'c:\windows\system',
  hProcess);
  if r = ERROR_SUCCESS then
  begin
    repeat
      Application.ProcessMessages;
      GetExitCodeProcess(hProcess, ExitCode);
    until
      ExitCode <> STILL_ACTIVE;
    result := true;
  end
  else
  begin
    case r of
      ERROR_FILE_NOT_FOUND : err:='The specified file was not found.';
      ERROR_PATH_NOT_FOUND : err:='The specified path was not found.';
      ERROR_DDE_FAIL : err:='The DDE transaction failed.';
      ERROR_NO_ASSOCIATION : err:='There is no application associated ' +
      'with the given filename extension.';
      ERROR_ACCESS_DENIED : err:='Access denied';
      ERROR_DLL_NOT_FOUND : err:='DLL not found';
      ERROR_CANCELLED : err:='The function prompted the user for the ' +
      'location of the application, but the user cancelled the request.';
      ERROR_NOT_ENOUGH_MEMORY: err:='Not enough memory';
      ERROR_SHARING_VIOLATION: err:='A sharing violation occurred.';
      else
        err := 'Unknown';
    end;
    MessageDlg('Error: ' + err, mtError, [mbOk], 0);
  end;
end;

Программный код на Delphi, использующий функцию ShellExecuteEx, чтобы запустить внешнюю программу (rar.exe) и дождаться ее завершения. Программа проверяет, была ли найдена указанная файловая система, и если нет, отображает сообщение об ошибке.

Распределение кода:

  1. Функция StartWithShell принимает четыре параметра: Prog (название программы), par (параметры), Verz (версия) и hProcess (указатель на процесс).
  2. Она инициализирует структуру exInfo с необходимыми значениями, такими как путь к файлу, верб, параметры и режим отображения.
  3. Функция вызывает ShellExecuteEx с указателем на @exInfo и проверяет, возвращает ли она код ошибки ERROR_SUCCESS. Если нет, она получает код ошибки с помощью GetLastError.
  4. В функции StartProgramm она вызывает StartWithShell, чтобы запустить программу rar.exe.
  5. Затем она дожидается завершения процесса, вызывая GetExitCodeProcess повторно, пока код выхода не будет больше STILL_ACTIVE.
  6. Если процесс успешно завершен, она устанавливает переменную Result в значение True. В противном случае она отображает сообщение об ошибке с конкретным кодом ошибки.

Коды ошибок мапируются на человеко-понятные сообщения в блоке case. Возможные коды ошибок:

  • ERROR_FILE_NOT_FOUND: Указанный файл не найден.
  • ERROR_PATH_NOT_FOUND: Указанный путь не найден.
  • ERROR_DDE_FAIL: Транзакция DDE не выполнена.
  • ERROR_NO_ASSOCIATION: Не существует приложения, связанного с данным расширением имени файла.
  • ERROR_ACCESS_DENIED: Доступ запрещен.
  • ERROR_DLL_NOT_FOUND: DLL не найдено.
  • ERROR_CANCELLED: Функция запросила у пользователя местоположение программы, но пользователь отменил запрос.
  • ERROR_NOT_ENOUGH_MEMORY: Не хватает памяти.
  • ERROR_SHARING_VIOLATION: Возникло нарушение совместного доступа.

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

В статье описывается функция StartWithShell в Delphi, которая запускает программу с параметрами и ожидает ее завершения.


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

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




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


:: Главная :: DOS и Консоль ::


реклама


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

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