hiho!
jak zrobić aby wywołać inny program już PO zakończeniu innego???
0
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;