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
Horschdware hat folgendes geschrieben : |
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
->
URL AUFRUFEN
->
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.
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'); IE.Navigate2(aUrl);
while IE.Busy do 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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!