Как вывести сообщение после выполнения shellexecute в delphi?

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

от terrence , в категории: Другие , год назад

Как вывести сообщение после выполнения shellexecute в delphi?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

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

от buster , год назад

@terrence 

Функция ShellExecute возвращает тип HINSTANCE, который представляет собой дескриптор экземпляра приложения, запущенного в результате вызова функции ShellExecute. Она не предназначена для получения информации о результате запуска приложения или его выполнении.


Для вывода сообщения после выполнения ShellExecute в Delphi можно использовать функцию WaitForSingleObject. Эта функция блокирует выполнение программы, пока не завершится процесс, который был запущен с помощью ShellExecute.


Вот пример кода, который показывает, как использовать WaitForSingleObject для ожидания завершения процесса, запущенного с помощью ShellExecute, и вывода сообщения в зависимости от его результата:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var
  sei: TShellExecuteInfo;
  hProcess: THandle;
begin
  // запускаем процесс с помощью ShellExecute
  FillChar(sei, SizeOf(sei), 0);
  sei.cbSize := SizeOf(sei);
  sei.fMask := SEE_MASK_NOCLOSEPROCESS;
  sei.lpVerb := 'open';
  sei.lpFile := 'C:path	omyexecutable.exe';
  ShellExecuteEx(@sei);

  // ждем завершения процесса
  hProcess := sei.hProcess;
  if hProcess <> 0 then
  begin
    WaitForSingleObject(hProcess, INFINITE);

    // выводим сообщение в зависимости от кода возврата процесса
    if GetExitCodeProcess(hProcess, ExitCode) then
    begin
      if ExitCode = 0 then
        ShowMessage('Процесс завершен успешно')
      else
        ShowMessageFmt('Процесс завершен с кодом %d', [ExitCode]);
    end;
  end;
end;


Обратите внимание, что ShellExecuteEx должна быть использована вместо устаревшей функции ShellExecute, чтобы получить дескриптор процесса через параметр hProcess. Также в этом примере предполагается, что используется стандартная функция ShowMessage, которая выводит сообщение на экран.