Application Exit

10 отговора 369 прегледа
#1

Application Exit

Възможно ли е да определя кога дадена програма стартирана от мое приложение ,чрез ShellExecute например, е приключила изпълнението си,тоест потребителя я е затворил??

Отговор
в отговор на nathan #2

Re: Application Exit

Не, със ShellExecute пускаш и забравяш, т.е. задаваш на операционната система да пусне. За твоя случай погледни CreateProcess

Дали завиването на крушка е софтуерен проблем?
Отговор
в отговор на nathan #3

Re: Application Exit

Има и други важни неща. Ето един пример:
[линк]
Освен дискутираните проблеми е важно самото изчакване да става в отделна нишка, инак приложението се вкисва докато чака. А както пише в статията, може и да не го дочака.

чети и дишай по-леко
Отговор
в отговор на nathan #4

Re: Application Exit

Ako i dwete programi sa twoi znachitelno po gafkawo stawa s izprashtane ma saobshteniq mejdu otdelnite procesi otkolkoto s tapo WaitForSingleObject....

------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на nathan #5

Re: Application Exit

to4no tozi site mi trqbva6e!
ina4e naistina pri polojenie 4e programite sa moi problemi nqma,no sa si obiknoveni exe-ta na razlichni prilojeniq...

Отговор
в отговор на nathan #6

Re: Application Exit

Pisah neshto podobno predi vreme.
Koda startira vunshno .exe i chaka dokato svurshi izpulnenieto na programata.

param:=(' '+port+' '+speed+' '+target+searchresult.name);
ZeroMemory(@sei, SizeOf(TShellExecuteInfo));
sei.cbSize := SizeOf(TShellExecuteInfo);
sei.fMask := SEE_MASK_NOCLOSEPROCESS;
sei.lpFile := PChar(CashDir);
sei.lpParameters := PChar(param);
sei.nShow := SW_HIDE;
ShellExecuteEx(@sei);
//Exec and Wait
if sei.hProcess > 32 then WaitForSingleObject(sei.hProcess, INFINITE)

koda ne e moi. preraboten e.

Отговор
в отговор на dalt #7

Re: Application Exit

towa bi bilo mnogo hubawo ako raboteshe w otdelna nishka i wse pak ne e bash kakto trqbwa....

uses windows;
....
type PProcessInformation=^TProcessInformation;
function StartProc (cmdl:string;pinfo:PProcessInformation):Boolean;
var
cmd:String;
pi:TProcessInformation;
si:TStartupInfo;
ppi:PProcessInformation;
begin
if pinfo<>nil then ppi:=pinfo else ppi:=@pi;
cmd:=cmdl+#0;
FillChar(ppi^,sizeof(TProcessInformation),0);
FillChar(si,sizeof(si),0);
si.cb:=sizeof (si);
si.wShowWindow:=SW_SHOWNORMAL;
si.dwFlags:=STARTF_USESHOWWINDOW;
Result:=CreateProcess(nil,@Cmd[1],nil,nil,false,CREATE_NEW_CONSOLE,nil,nil,si,ppi^)
end;
///i kadeto trqbwa

var
pi:TProcessInformation
cancelwait:boolean;
....
cancelwait:=false;
ShowWindowAboutWaitCanceling();
If StartProc (cmdl,@pi) then begin
while WaitForSingleObject(pi.hProcess,100)=WAIT_TIMEOUT do begin
Application.ProcesMessages;
if cancelwait then begin
ShowMessage ('Wait canceled!');
break;
end;
end;
if not cancelwait then showmessage ('Done!');
end else showmessage ('Start failed!');
HideWindowAboutWaitCanceling();


------------------------------
I got a COMPILER, and I'm not afraid to use it!
Отговор
в отговор на nathan #8

Re: Application Exit

впоследствие възникна друг проблем...
моето приложение зависи от това да направи нещо преди да се затвори или унищожи...обаче когато евентуално възникне любимата Windows грешка със невероятният избор между Close ili Details(+ Debug) приложението ми не извършва това което трябва и следващия път не се стартира(понеже не е извършило нужният код).Някакви идеи как да се справя с това?

Отговор
в отговор на nathan #9

Re: Application Exit

напиши си "менажер" програмче, което да прави това което трябва да се свърши на OnExit на основното програмче. тоа манажер може да си поллва през 1 секунда дали още е жива основната, и ако не - да бачка.

други възможности - фиксни това което се опитва да срине вин-а, смени вина с по-пресен /ако си на 98/...

--------------------------------------
Започва Път от моят праг...
Отговор
в отговор на Hateras #10

Re: Application Exit

Това е добра идея обаче аз съм песимист и си мисля ако забие win-a какво ще стане...май най-добре ще е да променя цялата функционалност така че да не се случват подобни работи

Отговор
в отговор на nathan #11

Re: Application Exit

ако забие win-а...
а какво ще правиш ако някой си изтърве нервите и натисне Копчето... безплатен бункер, можеби :-))))

--------------------------------------
Започва Път от моят праг...
Отговор