uruchamianie po zakończeniu

0

hiho!
jak zrobić aby wywołać inny program już PO zakończeniu innego???

0

hiho!

onClose
0

ehhh... jakby chodziło o takie rzeczy to by w forum newbie wylądowało... chodzi o wywołanie programu X spod mojego, a po zamknięciu X wywołania Y

0

to spod twojego programu wywolaj X i sprawdzaj okno lub proces czu X istnieje nadal a gdy zniknie wywolaj Y
tyle ze twoj program pierwotny musi byc caly czas wlaczony i sprawdzac czy X istnieje

0

No dobra, ale jak sprawdzić po procesie???

0
uses Windows;

var
  proc_info:  TProcessInformation;
  startinfo:  TStartupInfo;
begin

//Uruchamiamy X
ZeroMemory(@proc_info, sizeof(proc_info));
ZeroMemory(@startinfo, sizeof(startinfo));
startinfo.cb := sizeof(TStartupInfo);
if CreateProcess('X.exe', '', nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, startinfo, proc_info) then
  begin
  WaitForSingleObject(proc_info.hProcess, INFINITE);
  CloseHandle(proc_info.hThread);
  CloseHandle(proc_info.hProcess);
  end;

//Zakończony X, uruchamiamy i czekamy na Y
ZeroMemory(@proc_info, sizeof(proc_info));
ZeroMemory(@startinfo, sizeof(startinfo));
startinfo.cb := sizeof(TStartupInfo);
if CreateProcess('Y.exe', '', nil, nil, FALSE, NORMAL_PRIORITY_CLASS, nil, nil, startinfo, proc_info) then
  begin
  WaitForSingleObject(proc_info.hProcess, INFINITE);
  CloseHandle(proc_info.hThread);
  CloseHandle(proc_info.hProcess);
  end;

end.
0

A jak ktoś sobie zmieni nazwy "egzeków" X i Y? :>

0

będzie działać...

0

uruchamia program i czeka na jego zamkniecie.
jak przerobisz bedzie ok.

a co do zmiany nazwy execa - przecieŻ napisal ze chce ten program uruchomic poprzez swoj program.

procedure RunAndWait(S:String);
var SI:TStartupInfo;
    PI:TProcessInformation;
begin
 FillChar(SI,sizeof(SI),0);
 with SI do
 begin
  dwFlags:=STARTF_USESHOWWINDOW;
  wShowWindow:=SW_SHOW;
  cb:=sizeof(TStartupInfo);
 end;

 if CreateProcess(nil,PChar(S),nil,nil,FALSE,NORMAL_PRIORITY_CLASS,nil,nil,SI,PI) then
  with PI do
  begin
  application.ProcessMessages;
   WaitForInputIdle(hProcess,1000);
   WaitForSingleObject(hProcess,10000);
   WaitForSingleObject(hThread,10000);
   CloseHandle(hProcess);
   CloseHandle(hThread);
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1