我有一些代码可以启动一个进程并挂起一个事件处理程序来处理进程退出的时候,我的代码是用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了解不多,所以感谢任何帮助,谢谢。
答案 0 :(得分:7)
是的,你可以用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;