Application Exit
10 отговора
369 прегледа
Application Exit
Възможно ли е да определя кога дадена програма стартирана от мое приложение ,чрез ShellExecute например, е приключила изпълнението си,тоест потребителя я е затворил??
Re: Application Exit
Не, със ShellExecute пускаш и забравяш, т.е. задаваш на операционната система да пусне. За твоя случай погледни CreateProcess
Дали завиването на крушка е софтуерен проблем?
Дали завиването на крушка е софтуерен проблем?
Re: Application Exit
Има и други важни неща. Ето един пример:
[линк]
Освен дискутираните проблеми е важно самото изчакване да става в отделна нишка, инак приложението се вкисва докато чака. А както пише в статията, може и да не го дочака.
чети и дишай по-леко
[линк]
Освен дискутираните проблеми е важно самото изчакване да става в отделна нишка, инак приложението се вкисва докато чака. А както пише в статията, може и да не го дочака.
чети и дишай по-леко
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!
------------------------------
I got a COMPILER, and I'm not afraid to use it!
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...
ina4e naistina pri polojenie 4e programite sa moi problemi nqma,no sa si obiknoveni exe-ta na razlichni prilojeniq...
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.
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.
Re: Application Exit
towa bi bilo mnogo hubawo ako raboteshe w otdelna nishka i wse pak ne e bash kakto trqbwa....
------------------------------
I got a COMPILER, and I'm not afraid to use it!
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!
Re: Application Exit
впоследствие възникна друг проблем...
моето приложение зависи от това да направи нещо преди да се затвори или унищожи...обаче когато евентуално възникне любимата Windows грешка със невероятният избор между Close ili Details(+ Debug) приложението ми не извършва това което трябва и следващия път не се стартира(понеже не е извършило нужният код).Някакви идеи как да се справя с това?
моето приложение зависи от това да направи нещо преди да се затвори или унищожи...обаче когато евентуално възникне любимата Windows грешка със невероятният избор между Close ili Details(+ Debug) приложението ми не извършва това което трябва и следващия път не се стартира(понеже не е извършило нужният код).Някакви идеи как да се справя с това?
Re: Application Exit
напиши си "менажер" програмче, което да прави това което трябва да се свърши на OnExit на основното програмче. тоа манажер може да си поллва през 1 секунда дали още е жива основната, и ако не - да бачка.
други възможности - фиксни това което се опитва да срине вин-а, смени вина с по-пресен /ако си на 98/...
--------------------------------------
Започва Път от моят праг...
други възможности - фиксни това което се опитва да срине вин-а, смени вина с по-пресен /ако си на 98/...
--------------------------------------
Започва Път от моят праг...
Re: Application Exit
Това е добра идея обаче аз съм песимист и си мисля ако забие win-a какво ще стане...май най-добре ще е да променя цялата функционалност така че да не се случват подобни работи
Re: Application Exit
ако забие win-а...
а какво ще правиш ако някой си изтърве нервите и натисне Копчето... безплатен бункер, можеби :-))))
--------------------------------------
Започва Път от моят праг...
а какво ще правиш ако някой си изтърве нервите и натисне Копчето... безплатен бункер, можеби :-))))
--------------------------------------
Започва Път от моят праг...