#windows #delphi
Запускаю выполнение другой программы при помощи функции ShellExecute: SPar := тут любая команда; // Тут выполнения функции ShellExecute(Handle, nil, 'cmd.exe', PChar(SPar), nil, SW_Hide); Как показать сообщение после того как функция ShellExecute завершит свою работу? Я предполагаю что то типа этого или как правильней будет? if ShellExecute(Handle, nil, 'cmd.exe', PChar(SPar), nil, SW_Hide) = ??? then ShowMessage('Работа завершена');
Ответы
Ответ 1
Ответ - никак. Функция ShellExecute не позволяет получить информацию о времени жизни программы. Данная функция является устаревшей и не рекомендуется к использованию. Вам нужно вызвать функцию ShelExecuteEx или CreateProcess (в данном конкретном случае лучше последнюю), получить хендл запущенного процесса и дождаться завершения этого процесса при помощи функции WaitForSingleObject var LCmd: string; LInfo: TStartupInfo; LPI: TProcessInformation; begin // Заполняем структуры LCmd := 'cmd.exe ' + SPar; FillChar(LInfo, SizeOf(LInfo), 0); LInfo.cb := SizeOf(LInfo); LInfo.dwFlags := STARTF_USESHOWWINDOW; LInfo.wShowWindow := SW_HIDE; // Запускаем программу Win32Check(CreateProcess( 'cmd.exe', // lpApplicationName, PChar(LCmd), // lpCommandLine, nil, // lpProcessAttributes, nil, // lpThreadAttributes, False, // bInheritHandles, CREATE_NO_WINDOW, // dwCreationFlags, nil, // lpEnvironment, nil, // lpCurrentDirectory, LInfo, // lpStartupInfo, LPI // lpProcessInformation )); try // Закрываем хендл главного потока (он нам не нужен) CloseHandle(LPI.hThread); // Ждем завершения процесса Win32Check(WaitForSingleObject(LPI.hProcess, INFINITE) <> WAIT_FAILED); finally // Закрываем хендл процесса CloseHandle(LPI.hProcess); end; ShowMessage('Программа завершена'); end;
Комментариев нет:
Отправить комментарий