У меня есть некоторый код, который запускает процесс и поднимает трубку обработчик событий для обработки, когда процесс выходит, код, который я имею, написан в C# и интересно, возможно ли что-то подобное с Delphi.
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "notepad.exe";
myProcess.EnableRaisingEvents = true;
myProcess.Exited += new System.EventHandler(Process_OnExit);
myProcess.Start();
public void Process_OnExit(object sender, EventArgs e)
{
//Do something when the process ends
}
Я не знаю много о Delphi, таким образом, любая справка ценилась бы, спасибо.
] Да, вы можете сделать что-то подобное с Дельфи. Я не видел использования обработчика событий, но можно создать процесс, дождаться его завершения, а затем сделать что-то, когда это произойдет. Положите его в другой поток, если хотите что-то сделать в это время.[
] []Вот код для создания процесса и ожидания, что я соскребал из сети:[
] [procedure ExecNewProcess(const 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
//Note: This will wait forever if the process never ends!
// You are better off using a loop with a timeout, or WaitForMultipleObject
if Wait then
WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end
else
begin
RaiseLastOSError;
//SysErrorMessage(GetLastError());
end;
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
]