@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
, которая выводит сообщение на экран.