Entwickler-Ecke

Internet / Netzwerk - Internet Explorer steuern


LittleBen - Mi 21.09.11 18:11
Titel: Internet Explorer steuern
Hallo,
um den Internet Explorer aus meinem Programm heraus zu starten benutze ich folgenden Code.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure OpenIE(aURL: string);
var
  IE: Variant;
  WinHanlde: HWnd;
begin
 if (VarIsEmpty(IE)) then
 begin
  IE:= CreateOleObject('InternetExplorer.Application');
  IE.Visible:= true;
  IE.Navigate(aURL);
  IE.Quit;
 end
 else
 begin
  WinHanlde:= FindWindow('IEFrame'nil);
  if (0 <> WinHanlde) then
  begin
   IE.Navigate(aURL);
   SetForegroundWindow(WinHanlde);
  end
  else
   ShowMessage('Can''t open IE !');
 end;
end;
(http://www.swissdelphicenter.ch/de/showcode.php?id=107) Nun will ich aber, dass nach dem laden der Seite, also NavigateComplete, der IE wieder geschlossen wird. Wie kann ich überprüfen, ob die Seite ganz geladen wurde? Hoffe, ihr könnt mir helfen!

Viele Grüße,
Benny


Horschdware - Mi 21.09.11 18:14

Warte mal ganz kurz:
Welchen Sinn hat das denn, extra den Internet Explorer einzubinden, um eine Webseite aufzurufen, nur um das Ganze dann sofort wieder zu schliessen?

Willst du einfach nur eine URL aufrufen, um etwa ein PHP Script im Hintergrund zu triggern? Wenn ja, dann ginge das auch einfacher!


LittleBen - Mi 21.09.11 18:17

user profile iconHorschdware hat folgendes geschrieben Zum zitierten Posting springen:
Willst du einfach nur eine URL aufrufen, um etwa ein PHP Script im Hintergrund zu triggern? Wenn ja, dann ginge das auch einfacher!
Ja, genau. Aber wenn ich das anderst mache werden Administratorreche verlangt. Das will ich verhindern.


Gausi - Mi 21.09.11 18:33

Dann machst du was falsch. Man benötigt keine Administrator-Rechte, um auf eine Seite im Netz zuzugreifen. Das geht mit den Indy-Komponenten einfach so.


Horschdware - Mi 21.09.11 18:35

Wie hast du das denn bisher (ohne IE) probiert?
Schau doch mal in die Suche, da gibt es schöne Beispiele, wie so etwas von anderen gelöst wurde
-> Suche in: Delphi-Forum URL AUFRUFEN
-> Suche in: Delphi-Forum INDY HTTP


LittleBen - Mi 21.09.11 18:45

Das Problem ist, das bei allen internen URL Aufrufen Admininistratorrechte benötigt werden oder die Firewall/Anti Viren Schutz anschlägt. Das Verzägert den Start...


Gausi - Mi 21.09.11 19:14

Dann machst du was falsch, abgesehen evtl. von der Firewall-Warnung, die einem ein Gefühl von Sicherheit geben soll.

Ich rufe z.B. in meinem Player an einigen Stellen (teilweise auch im Hintergrund) Textdateien oder kleine PHP-Scripte im Netz auf, und bisher kam keine Rückmeldung von Virenscannern, oder Hinweise bzgl. Administrator-Rechte.

Und wenn du nicht willst, dass ggf. eine Firewall fragt, ob dein Programm ins Netz darf, dann stellt sich mir die Frage nach der Rechtmäßigkeit deines Vorhabens. :roll:


LittleBen - Mi 21.09.11 19:20

AntiVir schlägt bei mir auch kein Alarm. Habe aber BullGuard, ein etwas besserer Scanner. Naja, dann werde ich es wohl doch mit Indy machen... Aber es sollte doch eigentlich nicht so schwer sein per Ole abzufragen, ob die aufgerufene Seite fertig geladen ist.


jaenicke - Mi 21.09.11 21:32

user profile iconLittleBen hat folgendes geschrieben Zum zitierten Posting springen:
Aber es sollte doch eigentlich nicht so schwer sein per Ole abzufragen, ob die aufgerufene Seite fertig geladen ist.
Vielleicht damit:
http://www.swissdelphicenter.ch/de/showcode.php?id=2058

Aber eine saubere Lösung ist das absolut nicht...


LittleBen - Do 22.09.11 14:34

Maaaaaan! Das ist so enfach...Um abzufragen, ob die aufgerufene Seite geladen wurde, muss nur die getan werden:

Delphi-Quelltext
1:
2:
while IE.Busy do
 application.ProcessMessages
Gibt's da irgendwie ein Haken?


Horschdware - Do 22.09.11 15:02

Netter Versuch ;-)

aber das wird nicht funktionieren.
Du hast hier lediglich eine Schleife, die solange "nichts" tut (ausser Nachrichten des Systems zu verarbeiten), bis der IE "fertig" ist. Ob er dabei die Seite erfolgreich geladen hat oder wegen falscher URL / Server down / keine Verbindung abbricht ist dabei dann egal.


Andreas L. - Do 22.09.11 15:08

Indy Beispiel:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  http: TIdHTTP;
  html: String;
begin
  http := TIdHTTP.Create(nil);
  try
    html := http.Get('http://www.google.de/q=Suchwort', s);
  finally
    http.free;
  end;
end;


Wenn dabei dein Viren-Scanner reinfunkt hast du ihn wohl falsch konfiguriert (zu aggressiv) oder es ist sinnvoll dich von ihm zu trennen...


LittleBen - Mi 05.10.11 20:20

Heute habe ich mich nochmal mit diesem Thema beschäfftigt (da ich diese Funktion wieder brauche) und dabei musste ich festellen, dass der Internet Explorer manchmal abstürzt und Win7 die Fehlermeldung "Internet Explorer 8 Funktioniert nicht mehr" ausgibt. Woran kann das liegen, wenn die Funktion

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure OpenIE(aUrl: string);
var IE: Variant;
    WinHanlde: HWnd;
begin
 if (VarIsEmpty(IE)) then
 begin
  IE:= CreateOleObject('InternetExplorer.Application');  // Hier stürzt er dann ab
  IE.Navigate2(aUrl);

  while IE.Busy do                 // Funktioniert wunderbar!
   Application.ProcessMessages;
  IE.Quit;
 end
 else
 begin
  WinHanlde:= FindWindow('IEFrame'nil);
  if (0 <> WinHanlde) then
  begin
   IE.Navigate2(aUrl);
   SetForegroundWindow(WinHanlde);
  end
  else
   ShowMessage('Can''t open IE !');
 end;
end;
mehrmals im Programm aufgerufen wird.

Hoffe, dass jemand helfen kann!


Boldar - Mi 05.10.11 21:11

Also nur mal nebenbei: ein programm, was Internet-Explorer benutzt, um an der Firewall vorbeizukommen, halte ich nicht für vertrauenerweckend.


LittleBen - Sa 08.10.11 10:52

Hab das Ganze jetzt doch mit Indy gelöst.