Запуск процесса и прослушивание события выхода - PullRequest
4 голосов
/ 05 января 2010

У меня есть некоторый код, который запускает процесс и подключает обработчик событий для обработки при выходе из процесса, мой код написан на 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, поэтому любая помощь будет признательна, спасибо.

1 Ответ

7 голосов
/ 05 января 2010

Да, вы можете сделать что-то подобное с 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;
...