Запуск программы и ожидание завершения определенное время



Автор: Kostas
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Запуск программы и ожидание завершения опр.время
Запускает внешнюю программу и ожидает его завершения определённое время,
если истекает время то, программа продолжает работу не зависимо от
состояния внешней программы (На случай подвисания вн. прог-мы, особенно DOS)
Зависимости: Windows
Автор:       Kostas, [email protected], РБ Гомельская обл. г. Речица
Copyright:   вроде delphi.mastak.ru (слегка доработанно)
Дата:        03 мая 2002 г.
***************************************************** }
function ExecAndWait(aCmd: string; WaitTimeOut: cardinal = INFINITE): Cardinal;
var
si: STARTUPINFO;
pi: PROCESS_INFORMATION;
res: BOOL;
r: cardinal;
begin
with si do
begin
cb := sizeof(si);
lpReserved := nil;
lpDesktop := nil;
lpTitle := PChar('External program "' + aCmd + '"');
dwFlags := 0;
cbReserved2 := 0;
lpReserved2 := nil;
end;
res := CreateProcess(nil, PChar(aCmd), nil, nil, FALSE, 0, nil, nil, si, pi);
if res then
WaitForSingleObject(pi.hProcess, WaitTimeOut);
GetExitCodeProcess(pi.hProcess, r);
result := r;
end;
// Пример использования:
procedure Exec(CommandStr, WaitTime);
begin
if ExecAndWait(CommandStr, WaitTime) = WAIT_FAILED then
ShowMessage('Истекло время ожидания внешней программы ' + CommandStr);
end;

Далее: Как завершить задачу в Windows NT (а заодно получить PID задачи) »»