Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Otvaranje i zatvaranje firefox-a

[es] :: C/C++ programiranje :: Otvaranje i zatvaranje firefox-a

[ Pregleda: 2986 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

itf
Zagreb

Član broj: 59794
Poruke: 993
*.adsl.net.t-com.hr.



+9 Profil

icon Otvaranje i zatvaranje firefox-a13.07.2008. u 09:18 - pre 192 meseci
Radim jednu aplikaciju koja nakon prebacivanja podataka na ftp server treba izvršiti php skriptu koja izvrši validaciju itd itd. Problem je u tome što kada izvršavanje web skripte pokušam izvesti interno iz aplikacije pomoću TCppWebBrowser komponente da mi je to užasno sporo (do 15ak sekundi), a isto se događa ukoliko koristim i Internet Explorer. Štoviše, zna se dogoditi da se skripta uopće niti ne izvrši! Međutim, kada koristim ShellExecute i stavim da je defaultni browser Firefox sve radi super. Skripta se uvijek izvrši i treba joj najviše oko 4 sek.

Problem je u tome što ja želim zatvoriti firefox nakon što se skripta izvrši, a to nemam ideju kako da izvedem. Jedan način bi bio preko EnumWindows, ali opet.. što ako jedan od korisnika već ima otvoren firefox pa aplikacija zatvori krivi? Druga solucija bi bila preko CreateProccess, ali ne vidim kako da dobijem handle procesa preko kojeg da pošaljem WM_CLOSE...

Ako netko ima ideju bilo bi super, a pogotovo ako se to može izvesti interno iz aplikacije korištenjem BCB komponenti. Ja sam gore to pokušao, no sporo je i nepouzdano.
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Otvaranje i zatvaranje firefox-a13.07.2008. u 09:52 - pre 192 meseci
Ako je title-bar od FireFox browsera uvek isti koristi funkciju FIndWindow da bi pronasao prozor ....
Code:


 HWND hWndFireFox= ::FindWindow(NULL,_T("PHP skripta - Title bar text od Firefox-a"));

 //uzmes njegov proces id 
 DWORD dwProcessID = 0 ; 
 ::GetWindowThreadProcessId(hWndFireFox,&dwProcessID) ; 

  //otvoris proces od prozora 
 HANDLE hHandle;
 hHandle = ::OpenProcess(PROCESS_ALL_ACCESS,0,dwProcessID);
     
  DWORD dwExitCode ; 

 ::GetExitCodeProcess(hHandle,&dwExitCode);

  //zatvaranje procesa ... 
 ::TerminateProcess(hHandle,dwExitCode);


Radi se sve o WIn32 funkcijama tako da i lagano mozes iskoristiti u BCB-u

Viva lollapalooza
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.adsl.net.t-com.hr.



+9 Profil

icon Re: Otvaranje i zatvaranje firefox-a13.07.2008. u 10:37 - pre 192 meseci
Nažalost, title se mijenja... Da se ne mijenja, već bi ja to našao preko FindWindow. Zato sam i mislio prvo preko EnumWindows selektirati sve firefox prozore... ali opet, valjda postoji nešto jednostavnije jer ne volim raditi "akrobacije".

Meni bi bilo idealno da aplikacija sama to interno odradi, ali to mi je sa postojećim komponentama jednostavno sporo i nepouzdano. Ako radim ovako preko stvaranja procesa imam problem jer skripta će se izvršiti u već postojećoj instanci firefox-a (ukoliko neka već postoji) i time zatvoriti tu istu. A ta postojeća instanca može već biti otvorena od strane nekog korisnika OS-a i time njemu ometam rad. Ovo bi bilo dobro kad bi ja mogao otvoriti novu instancu, da se skripta izvrši u njoj, te da se na kraju onda zatvori, bez da ometa korisnika imao on već otvoren firefox ili ne.

EDIT:

Zar ne bi trebalo biti i WaitForSingleObject prije GetExitCodeProcess?

[Ovu poruku je menjao itf dana 13.07.2008. u 11:47 GMT+1]
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Otvaranje i zatvaranje firefox-a13.07.2008. u 11:33 - pre 192 meseci
Citat:
itf: Nažalost, title se mijenja... Da se ne mijenja, već bi ja to našao preko FindWindow. Zato sam i mislio prvo preko EnumWindows selektirati sve firefox prozore... ali opet, valjda postoji nešto jednostavnije jer ne volim raditi "akrobacije".

Ako sto ne koristis funkciju CreateProcess umesto ShellExecute onda ces automatski dobiti
u PROCESS_INFORMATION strukturi handle od procesa pomocu kojeg ces zatvarati instancu
koja je otvorila samo tvoja aplikacija jer onda ti i ne treba kod koji ce preko FindWindow i GetWindowThreadProcessID
gasiti instancu browsera
Code:
 
  STARTUPINFO si;
  PROCESS_INFORMATION pi;

  CreateProcess(.....,&si,&pi) ; 

  DWORD dwExitCode ; 
  GetExitCodeProcess(pi.hProcess,&dwExitCode);
  TerminateProcess(pi.hProcess,dwExitCode);




http://msdn.microsoft.com/en-us/library/ms682512(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms684873(VS.85).aspx

Citat:

Meni bi bilo idealno da aplikacija sama to interno odradi, ali to mi je sa postojećim komponentama jednostavno sporo i nepouzdano. Ako radim ovako preko stvaranja procesa imam problem jer skripta će se izvršiti u već postojećoj instanci firefox-a (ukoliko neka već postoji) i time zatvoriti tu istu. A ta postojeća instanca može već biti otvorena od strane nekog korisnika OS-a i time njemu ometam rad. Ovo bi bilo dobro kad bi ja mogao otvoriti novu instancu, da se skripta izvrši u njoj, te da se na kraju onda zatvori, bez da ometa korisnika imao on već otvoren firefox ili ne.


Pa najbolje bi bilo sa ActiveX kontrolom da resis slucaj.
Imas sve event-e browsera (OnBeforeNavigate,DocumentComplete, itd,...) a i ne moras da se zezas sa Win32 Api-ije oko pokretanja instanci ..
Cudi me da ti toliko sporo radi , probaj da nadjes neku drugu komponentu ...

Ja sam radio dosta puta sa WebBrowser ActiveX komponentom u VC++ i
nisam imao nikada slicnih problema ...






Viva lollapalooza
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.adsl.net.t-com.hr.



+9 Profil

icon Re: Otvaranje i zatvaranje firefox-a13.07.2008. u 11:37 - pre 192 meseci
Problem s kreiranjem procesa jest da ja ne znam kako osigurati da se skripta izvrši baš u tom novom forefox prozoru, a ne u nekom već otvorenom...

A glede ActiveX-a... u BCB-u postoje dvije komponente za ovakav slučaj (koliko sam ja vidio), no kako mi se čini obje kao da su integrirane od Internet Explorera jer s obje mi se događa da je sve užasno sporo, pa čak i da se skripta ne izvrši uopće. Možda postoji još neka koja se može skinuti s web-a?
 
Odgovor na temu

deerbeer
Beograd

Član broj: 174418
Poruke: 1189
*.adsl-a-1.sezampro.yu.



+395 Profil

icon Re: Otvaranje i zatvaranje firefox-a13.07.2008. u 12:10 - pre 192 meseci
Citat:
itf: Problem s kreiranjem procesa jest da ja ne znam kako osigurati da se skripta izvrši baš u tom novom forefox prozoru, a ne u nekom već otvorenom...

NE nije u tome problem. CreateProcess otvara novi prozor i novi proces tako da imas potpunu kontrolu
Ovde ti je veci problem sto ne znas da li se strana ucitala tj. da li su se izvrsile skripte pre nego sto ubijes proces ..

Citat:

A glede ActiveX-a... u BCB-u postoje dvije komponente za ovakav slučaj (koliko sam ja vidio), no kako mi se čini obje kao da su integrirane od Internet Explorera jer s obje mi se događa da je sve užasno sporo, pa čak i da se skripta ne izvrši uopće. Možda postoji još neka koja se može skinuti s web-a?

Koliko sam uspeo da vidim TCppWebBrowser je ustvari wrapper komponenta za ActiveX Internet Explorer.
Probaj da ucitas neku drugu web stranu sa ActiveX-om i vidi da li se isto dogadja.
Download-uj Fidler http://www.fiddlertool.com/fiddler/ i probaj da iz njega izvuces zasto se strana sporo ucitava







Viva lollapalooza
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
*.adsl.net.t-com.hr.



+9 Profil

icon Re: Otvaranje i zatvaranje firefox-a13.07.2008. u 12:28 - pre 192 meseci
...a u međuvremenu sam pronašao i ovo:

http://www.iol.ie/~locka/mozilla/control.htm
http://www.paranoia.clara.net/...ng_the_lizard_with_delphi.html
 
Odgovor na temu

[es] :: C/C++ programiranje :: Otvaranje i zatvaranje firefox-a

[ Pregleda: 2986 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.