Да, вы можете сделать что-то подобное с Delphi. Я не видел использования обработчика событий, но вы можете создать процесс, дождаться его завершения, а затем сделать что-нибудь, когда это произойдет. Поместите это в другой поток, если вы хотите что-то сделать за это время.
Вот код для создания процесса и ожидания, что я соскобил сеть:
procedure ExecNewProcess(ProgramName : String; Wait: Boolean);
var
StartInfo : TStartupInfo;
ProcInfo : TProcessInformation;
CreateOK : Boolean;
begin
{ fill with known state }
FillChar(StartInfo,SizeOf(TStartupInfo), 0);
FillChar(ProcInfo,SizeOf(TProcessInformation), 0);
StartInfo.cb := SizeOf(TStartupInfo);
CreateOK := CreateProcess(nil, PChar(ProgramName), nil, nil,False,
CREATE_NEW_PROCESS_GROUP or NORMAL_PRIORITY_CLASS,
nil, nil, StartInfo, ProcInfo);
{ check to see if successful }
if CreateOK then
begin
//may or may not be needed. Usually wait for child processes
if Wait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end
else
begin
//ShowMessage('Unable to run '+ProgramName);
SysErrorMessage(GetLastError());
end;
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;