Skocz do zawartości

[DELPHI] jak sprawdzić jakie są zainstalowane przegladarki www ?


Ultimion

Polecane posty

Witam

 

Mam taki problemik...otoż chcialbym napisac programik, ktory sprawdzi jakie sa zainstalowane przeglądarki www w systemie, nastepnie uruchomil jedna przegladarke (okno zminimalizowane) no i wreszcie aby program sam w przegladarce otwieral pewne strony , analizowal jej żródło. :) w ogole nie mam pojecia o winAPI :) moze jakis komponent do tego ??? a jezeli nie , to jak by do tego mozna bylo podejść?

Link do komentarza
Udostępnij na innych stronach

Na rozgrzewkę proponuję położyć komponent TWebBrowser edita i kilka przycisków a w każdym inna z poniższych funkcji:

 
Edit1.Text:= 'http://forum.unit1.pl';
WebBrowser1.Navigate(Edit1.Text);       // otwieranie strony
WebBrowser1.Refresh;                         // odświeżanie
WebBrowser1.GoBack;                         // poprzednia strona ...
WebBrowser1.GoForward;                    // następna strona
WebBrowser1.Stop;                             // zatrzymaj
WebBrowser1.GoHome;
WebBrowser1.Quit;

 

Uruchamianie programów i otwieranie plików http://www.lukas-home-page.ovh.org/artykul...hellExecute.php

 

Wykrycie Internet explorera http://forum.4programmers.net/Delphi_Pasca..._Detect_plug-in

z przeglądarkami będzie trochę więcej zabawy

Link do komentarza
Udostępnij na innych stronach

Ultimion: można użyć jak wspomniał poprzednik TWebBrowsera, opartego na zainstalowanym w systemie IE, ale jeżeli strony które chcesz analizowac nie potrzebują do obslugi JavaScriptu to polecam posłużyć się pakietem Synapse z http://www.ararat.cz/synapse/doku.php/download - dołączone są dema i dokumentacja, a do parsowania pobranego kodu mozna wykorzystać moduł do wyrażeń regularnych z http://regexpstudio.com - bo oczywiście nie trzeba znać WinAPI, exek trochę spuchnie to wiadomo, ale możesz go spakować UPX'em. Zresztą ciężko trochę od zera wymyślać koło i pisać w WinAPI obslugę protokołu HTTP jak jest do tego świetny według mnie pakiet Synapse, mający na pewno mniej bugów niż Indy i bardziej akutalny. Do bodajże Delphi 2009 wszystko jest z nim ok, wrzucasz odpowiednie moduły do katalogu z programem i dodajesz do sekcji uses. Wszystko powinno dzialać. W razie czego więcej informacji w dokumentacj, przykładach oraz oczywiscie google.

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

a czy uzywanie komponentu TwebBrowser nie powoduje, ze nie mozna zidnetyfikowac przegladarke internetową po stronie serwera? chodzi o to aby nie bylo widac, ze wchodze na strone z programu X a nie ze standardowej przegladarki ????

Link do komentarza
Udostępnij na innych stronach

Sprawdź na http://whatsmyuseragent.com jak jesteś widziany przez serwer. TWebBrowser jest oparty na silniku IE, więc przedstawia się tak jak jest skonfigurowana ta przeglądarka. Nie wiem jak mozna zmieniać UserAgenta w IE, kiedyś robiło się to przez rejestr, teraz nie wiem, IE używam po to aby wejść raz dziennie na jednej stronie i kliknąć w baner, bo pod Operą mam blokowane reklamy google i tyle, od IE jak najdalej :) Natomiast pod Synapse możesz ustawić inny niż domyslny UserAgent - niemal dowolny, jednak czasami ustawienie jakiegoś egzotycznego useragenta może powodować zmiany w pobieranych danych, ma to na przykład miejsce na FaceBooku przy odczycie danych w formacie JOMS. A przynajmniej tak zaobserwowałem.

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

wiec jest maly problem z TWebBrowser jak ogladam strony za pomoca tego komponentu to mam monit, ze uzywam starej przeglądarki :(

 

na stronie http://whatsmyuseragent.com/ tak jest to identyfikowane:

Your User Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)

a jak wchodze na stronke z IE z systemu to identyfikuje:

Your User Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)

jak to zmienic by TWebBrowser pokazywal MSIE 8.0 ???

Link do komentarza
Udostępnij na innych stronach

proxy odpada...tak w ogóle to po co proxy ???

 

chodzi o uruchomienie przeglądarki, która trzeba wykryć w systemie... ograniczę się do IE, ktory jest w windows..wiec muszę tylko sprawdzić gdzie jest zainstalowany system i gdzie jest plik

standardowo w winXP jest w

c:\Program Files\Internet Explorer\iexplore.exe

ale mamy rożne systemy , jak wiec zlokalizowac plik 'iexplore.exe' ???

 

jak go uruchamiać z wymuszeniem otwarcia podanej strony przez program ??? jak sprawdzać, czy strona została załadowana i jak przesłać źródło tej strony do programu w celu analizy ???

 

o to głównie chodzi... a my przeszliśmy do proxy ... eh :)

Link do komentarza
Udostępnij na innych stronach

Dobra troche poszukalem i ... potrafie juz uruchomic IE z poziomu mojego programu, moge tez zaladowac strone jaka chce, moge tez sprawdzac status strony (np czy sie cala zaladowala) moge ustawic czy okno przegladarki IE ma byc widoczne czy tez nie, a jezeli widoczne to jakiego rozmiaru itp.

 

stanąlem nad problemem.... sprawdzam czy strona sie zaladowala i jezeli sie zaladowala to chcialbym jej zrodlo zaladowac sobie np do memo. da sie to jakos zrobic ???

chce poprostu przeanalizowac zrodlo zaladowanej strony. Zaznaczam strona laduje sie w IE a nie w TWebBrowser.

 

calosc zrobilem uzywajac OLEObject :) wiec moze tez sie da w ten sposob zrodlo strony pobrac do programiku ??? jakies pomysly ???

Link do komentarza
Udostępnij na innych stronach

Czy ty aby nie utrudniasz sobie życia na siłe ?

 

Potrzebujesz załadować stronę z sieci tylko po to by pobrać źródło strony. Więc może nie wysadzaj otwartych drzwi i skorzystaj z pakietu indy bądź najzwyklejszych socketów toć to ~15 linijek kodu jak dobrze pamiętam...

Link do komentarza
Udostępnij na innych stronach

Witam.

 

Czy ty aby nie utrudniasz sobie życia na siłe ?

 

Potrzebujesz załadować stronę z sieci tylko po to by pobrać źródło strony. Więc może nie wysadzaj otwartych drzwi i skorzystaj z pakietu indy bądź najzwyklejszych socketów toć to ~15 linijek kodu jak dobrze pamiętam...

 

Można tak (kod chyba z forum Unit1):

 

procedure DownloadToStream(const URL: string; const SomeStream: TStream);
var
 Buffer : array[1..1024] of Byte;
 hSession, hURL : HINTERNET;
 dwRead : DWORD;
 pBuf : Pointer;
 dwBufLen : DWORD;
 dwIndex : DWORD;
begin
 hSession := InternetOpen(Opera_UserAgent,
 INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
 Application.ProcessMessages;

 try
   hURL := InternetOpenURL(hSession, PChar(URL), nil, 0,
   INTERNET_FLAG_RELOAD, 0);
   Application.ProcessMessages;

   dwBufLen := 1024;
   dwIndex := 0;
   GetMem(pBuf, dwBufLen);

   HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
                             pBuf, dwBufLen, dwIndex);

   FreeMem(pBuf, dwBufLen);
   try
     repeat
       InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
       SomeStream.WriteBuffer(Buffer, dwRead);
       Application.ProcessMessages;
     until dwRead = 0;
   finally
     InternetCloseHandle(hSession);
   end;
 finally
   InternetCloseHandle(hURL);
 end;
end;

 

Pozdrawiam!

Link do komentarza
Udostępnij na innych stronach

@up

 

Ja znalazłem na sieci coś takiego:

wymaga modułu Wininet

 

 

Delphi

 

 

function DownloadURL_NOCache(const aUrl: string; var s: String; agent : string = 'MyApp' ): Boolean;

var

hSession: HINTERNET;

hService: HINTERNET;

lpBuffer: array[0..1024 + 1] of Char;

dwBytesRead: DWORD;

begin

Result := False;

s := '';

hSession := InternetOpen( PChar(agent), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);

try

if Assigned(hSession) then

begin

hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);

if Assigned(hService) then

try

while True do

begin

dwBytesRead := 1024;

InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);

if dwBytesRead = 0 then break;

lpBuffer[dwBytesRead] := #0;

s := s + lpBuffer;

end;

Result := True;

finally

InternetCloseHandle(hService);

end;

end;

finally

InternetCloseHandle(hSession);

end;

end;

Link do komentarza
Udostępnij na innych stronach

powiem tak...nie moge zaladowac strony po raz drugi lub przy uzyciu innego programu niz to juz otwieram... to co mi tutaj podajecie powoduje, ze otwieram strone ponownie (po raz kolejny) a ja musze zrobic to tak jak powiedzialem ... przegladam strone za pomoca zainstalowanej przegladarki w systemie i tylko tak moge przegladac strony !!

Teraz skoro umiem uruchomic z poziomu programu przegladarke... i umiem zaladowac odpowiednia strone w tej przegladarce, odswiezyc itd.

 

powtorze dokladnie.

 

Musze moim programem pobrac zaladowana juz strone z IE (czyli nie otwieram ponownie strony z neta) tylko chce pobrac zrodlo strony , ktora juz jest zaladowana ... pobranie jej ponownie spowoduje, ze zaladuje sie ale inna zawartosc. krotko mowiac .... otwieram IE wpisuje adres w przegladarke i jak strona sie zaladuje to jej zrodlo chce scioagnac do swojego programu, czy takie cos mi udostepni pakiet Indy ???? jezeli nie, to ponawiam pytanie.

 

Jak pobrac zaladowana juz strone w przegladarce IE do mojego programu nie pobierajac danej strony z internetu tylko z przegladarki, ktora juz dana strone sobie otworzyla.

 

pozdro

 

JohnCTN

Link do komentarza
Udostępnij na innych stronach

Ultimion: ja nie rozumiem dlaczego uperłeś się otwierać stronę pod przeglądarką www i tak analizowac zwrocony kod, jak może to zrobić za Ciebie program w Delphi. Przecież Indy czy Synapse to taka właśnie kulawa przeglądarka - automat, pobierają lub wysyłąją to co chcesz i jak chcesz, jedynie nie mają obslugi javascriptu czy pluginów, ale do pobrania kodu html się nadają doskonale. Mogą to też zrobić te funkcje podane wcześniej z modułu WinInet, ale na przykład Synapse jest bardziej aktualne i łatwiejsze w obsłudze. Natomiast exek nie spuchnie aż tak bardzo z użyciem Synapse, jeżeli tego się obawiasz. Przynajmniej nie w Delphi 7. A i zawsze można exeka potratkować później UPX'em.

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

a no sie upieram :) powod jest oczywisty ... po stronie serwera musi byc widoczne ze uzywam ie8, Firefoxa lub opere :)

 

a nie przegladarka niezidentyfikowana .... chcialem to zrobic za pomoca TwebBrowser ...ale mam monit na stronie, ze strona sie nie zaladuje poniewaz nie uzywam przegladarki i prosza mnie o zainstalowanie IE8, Firefoxa lub Opere.

 

dlatego upieram sie aby program kontrolowal przegladarke zainstalowana w systemie ... moze z poziomu win API moge jakos uzyc opcji Copy i potem Paste ... wiem, ze kombinuje tropche ;/

Link do komentarza
Udostępnij na innych stronach

Radzę przeczytać po raz kolejny wątek :)

 

Chłopaki na samym początku mówili o agencie przeglądarki. Notabene w funkcji którą wygrzebałem z sieci również jest parametr określający jako która przeglądarka ma się kod podawać.

 

Chyba że jeszcze jakoś ten serwer identyfikuje przeglądarkę. Najlepiej podaj nam jego adres bądź dane czy używa ciasteczek itp.

Link do komentarza
Udostępnij na innych stronach

poradzilem sobie .... smile.gif

 

zaladuj zrodlo strony do memo (ViewHTML)

 

ViewHTML.Lines.Add (IEApp.Document.documentElement.innerHTML);

 

 

teraz tylko szukam jakiegos komponentu co bedzie mi przeszukiwal memo wg wzorca, mozecie jakis doradzic ???

Link do komentarza
Udostępnij na innych stronach

Z całym szacunkiem do Ciebie. Jednak ja się wyłączam w odpowiedziach 17 postów o tym co ktoś odpowiedział w 1. Ty się upierałeś po czym zrobiłeś jak powiedzieliśmy tylko na komponencie zamiast kodu :P

 

Po prostu wychodzę z założenia iż nie słuchasz co ci tłumaczą. Pamiętaj delphi to nie tylko komponenty to też kod.

Link do komentarza
Udostępnij na innych stronach

@Ultimion: do wyszukiwania wzorca w stringach i ich parsowania najlepiej skorzystać z wyrażeń regularnych. Polceam moduł z http://regexpstudio.com - są tam przykłady oraz dokumentacja, a także masa informacji w google. Bo wiesz sam TBrain Tobie nie wystsrczy, chociaż każdy programista powinien mieć ten komponent i umieć go używać, wspomagając się czasami TGoogle ;)

Pozdrawiam: olesio

Link do komentarza
Udostępnij na innych stronach

W ostateczności najprościej będzie na piechotę:

 

var
  SPage: string;       // gdzie SPage zawiera cały wczytany tekst strony
  S_HostName: string;
begin
  ...
  // SHostName:=
  ipos:= Pos('Hostname:</th><td>',SPage);
  Delete(SPage, 1, ipos-1+Length('Hostname:</th><td>'));
  ipos:= Pos('</td>',SPage);
  S_HostName:= Copy(SPage, 1, ipos-1);
  ...

Link do komentarza
Udostępnij na innych stronach

@Integer o takie przeszukanie mi chodzilo :)

 

Jakos nie dostalem tutaj odpowiedzi, znalazlem na jakis innych forach. ogolnie mowiac zrobilem chyba juz wszystko co chcialem, natomiast mam jeden problem, ktorego nie potrafie narazie rozwiazac, otoz:

 

otwieram przegladarke w taki sposob:

 

 
procedure TKomunikator.FormCreate(Sender: TObject);
begin
 IEApp             := CreateOLEObject('InternetExplorer.Application');
 IEApp.Visible     := false; 
 IEApp.Top         := top;
 IEApp.Left        := top;
 IEApp.Width       := 1280;
 IEApp.Height      := 800;
 IEApp.TheaterMode := false;
 IEApp.MenuBar     := false;
 IEApp.Resizable   := false;     // czy mozna zmienic wielkosc okna
 IEApp.Navigate('');
end;

 

jak widac, uruchamiam InternetExplorer i pustą strone ... dodatkowo ukrywam okno (nie widac go), ustalam wielkosc okna i wylaczam funkcje zmiany wielkosci okna.

moje pytanie ...jak wylaczyc mozliwosc zamkniecia okna przegladarki "x", musze to zablokowac podobnie jak Resizable .. ale nie moge znalezc takiego odpowiednika a wylaczenie okna , ktore otworzyl program powoduje utrate 'handle' i wywala blad :( jak uniemozliwic zamkniecie okna przegladarki, ktorą otwiera moj program ??? musze to zablokowac, gdyz jest moment w ktorym okno jest widoczne :) czyli w kodzie programu znajduje sie linijka "IEApp.Visible :=true;"

 

 

Ultimion

Link do komentarza
Udostępnij na innych stronach

Witam.

 

Jeżeli użytkownik nie musi widzieć tego okna, to ustaw mu wartości: IEApp.Top i IEApp.Left, na odpowiednie wartości minusowe.

 

Ty będziesz mógł na tym oknie wykonywać normalnie operacje, a użytkownik nie będzie go widział.

 

Pozdrawiam!

Link do komentarza
Udostępnij na innych stronach

Uzytkownik i ja to jedna osoba :) chodzi o to abym przez przypadek nie zamknąl przegladarki ... np wylaczyc "x" albo wyswietlic okno bez paska na gorze ... wtedy nie bedzie widac przyciskow "x" "minimalize i etc" program ma mozliwosc sterowania przegladarka i moze wlaczac lub wylaczac visible okna przegladarki ale sa takie momenty ze musze widziec okno :)

 

Ultimion

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...