Prüfen ob Internet explorer geöffnet ist / neues Tab öffnen

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Humax.

    Prüfen ob Internet explorer geöffnet ist / neues Tab öffnen

    Hallo!

    Ich öffne mit folgendem Code den Internet Explorer:

    Dim inex As Object = Nothing
    inex = CreateObject("InternetExplorer.Application")
    inex.Navigate2(http://google.de)
    Do While inex.Busy
    Loop


    Eine neue Webseite rufe ich folgendermaßen auf:
    If inex Is Nothing Then
    ' Problem wenn inex geschlossen wurde gibt es eine Fehlermeldung, da ja inex immer noch nicht nothing ist.
    inex = CreateObject( "InternetExplorer.Application"
    )
    End
    If
    inex.Navigate2(http://google.de)


    Habe nun 3 Fragen:

    1) Wie kann ich prüfen ob der der Internet Explorer geöffnet ist.

    2) Wie kann ich in einem geöffneten Explorer (oder in meinem geöffneten inex) eine Seite in einem neuen Tab öffnen?


    3) Wie kann ich ein Tab schließen



    1) starte den browser am besten mit process.start()
    ob der prozess läuft schaust du mit if process.getprocessesbyname("iexplore.exe").count > -1 then
    oder irgendwie so. alternativ kannst du alle alle fenstertitel nach "internet explorer" absuchen.

    2)focus auf IE, sendkeys strg+n (glaube ich), und danach sendkeys(homepage) und sendkeys("{enter}") -> nicht so tolle lösung

    3) wie 2) mit strg+w :P
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
    Also hab jetzt einiges ausprobiert. komme aber nicht weiter. Mein bisheriger Code:
    Dim internetexpl AsNew System.Diagnostics.Process()

    publicSub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    internetexpl.StartInfo.FileName = "iexplore.exe"

    internetexpl.StartInfo.WindowStyle = ProcessWindowStyle.Maximized
    internetexpl.Start()

    EndSub
    Wenn ich nun mit folgendem code prüfen will ob der Internetexplorer noch geöffnet ist bekomme ich 2 Unterschiedliche Ergebnisse!?
    1) Wenn Internetexplorer 1 mal geöffnet ist, ist das Ergebnis immer richtig, egal ob geschlossen oder offen
    2) Wenn der Internetexplorer mehrmals geöffnet ist bekomme ich immer das Ergebnis "geschlossen"! Es spielt dabei keine Rolle ob der Internetexplorer durch meinen Code geöffnet wurde, oder ob ich den IE "normal" geöffnet habe. Es macht auch keinen Unterschied ob ich den IE während der Laufzeit oder schon vorher mehrmals geöffnet habe. Sobald der IE mind. 2 mal läuft bekomme ich das Ergebnis geschlossen.
    private sub prüfen()
    If
    internetexpl.HasExited Then

    ' geschlossen...
    Else
    ' offen...
    EndIf
    end sub

    Auch der Tipp die Prozesse zu durchsuchen hilft mir nicht: Als Ergebnis (Anzahl IE Prozesse) bekomme ich immer 0
    PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Button2.Text =
    Process.GetProcessesByName("iexplore.exe").Count.ToString
    EndSub


    EDIT: ok, so bekomme ich dir richtige anzahl der Prozesse. Allerdings weis ich dadurch nicht ob mein Internetexpl geöffnet ist,da ja internetexpl.HasExited das Ergebnis "geschlossen" wieder gibt.

    Button2.Text = Process.GetProcessesByName("iexplore).Count.ToString

    Benutze Win7; VB2010 Express

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Humax“ ()

    Hi,

    also habe jetzt noch 2 Fragen

    1) Wie kann ich wenn ich überprüft habe das bereits ein InternetExplorer -Prozess läuft, diesen nutzen und dort ein neues Tab mit meiner Url öffnen? Oder geht das nicht und ich muss immer eine neues Fenster öffnen?

    2) Wie kann ich dort Eingabefelder ausfüllen? - oder geht das nur mit Webbrowsercontrol / oder wenn ich es so mache?
    Dim inex AsObject = Nothing

    inex = CreateObject("InternetExplorer.Application")
    inex.Navigate2(
    "webseite")
    ' warten bis seite geladen


    DoWhile inex.Busy
    Loop
    inex.document.getElementById("username").value = "benutzername"
    inex.document.getElementById("password").value = "passwort"
    hmm, eine Menge Frygen und nicht die einfachsten, da das Arbeiten mit dem InternetExplorer COM-Objekt nicht so simpel ist :huh:

    Ein paar Bemerkungen zu den bisherigen Posts, wo Dir ja verschiedene Möglichkeiten zum Managen einer IE-Anwendung gegeben wurden. Du hast (mindestens) 3 Methoden das umzusetzen:
    - per WebBrowser Control: Pro: einfach , komfortabel, .NET Control Nachteil: unterschiedliche GUI zum Original
    - per Original COM-Object: Pro: mehr Möglichkeiten als der .Net Wrapper, Nachteil: einiges komplizierter zu verwenden
    - Process.Start(): Pro: einfaches Starten einer Webseite mit StandardBrowser Nachteil: keine (sehr schlechte) Steuerung nach dem Start

    Da Du Dich schon am Anfang des Posts für das COM-Objekt entschieden hattest, gehe ich davon aus Du hattest Deine Gründe das WebBrowser Control nicht zu verwenden ? Welche ?

    Bevor wir zu Deinen Fragen kommen setze bitte in Deinem Projekt einen Verweis auf die SHDocVW.Dll in Windows.System32, damit greifen wir auf die Original-Klassen des IExploreres zu ( etwas mehr zum Aufbau hier). Jetzt zur wichtigsten Deklaration für Dich, der SHDocVw.ShellWindows, und der Deklaration Deines InternetExplorers:

    VB.NET-Quellcode

    1. Imports SHDocVw
    2. Public Class Form1
    3. Private IEShell As New SHDocVw.ShellWindows ' die Menge aller IE Instanzen
    4. Private WithEvents IE As SHDocVw.InternetExplorer ' Events können abgefangen werden


    Die ShellWindows Instanz enthält alle Instanzen der vorhandenen IExplorer, ist sie 0 so gibt es noch keine Instanz und Du musst sie neu anlegen. Aber selbst wenn die Anzahl >0 ist, heisst es immer noch nicht dass irgendeine sichtbar ist, abprüfen kannst Du es z.B. über LocationName:

    VB.NET-Quellcode

    1. For Each IE As SHDocVw.InternetExplorer In IEShell
    2. Trace.WriteLine(IE.LocationName)
    3. Next

    Einen neuen Tab anzulegen ist einfach, indem DU den IE auf eine vorhandene (sichtbare) Instanz setzt und beim Navigate2 vorgibts die neue Instanz in einem neuen Tab anzulegen (IE.Navigate2("www.google.de",2048)). Dummer weise hast Du keine Referenz auf die neue Instanz, da IE noch auf das alte Element zeigt, also musst Du sie dir aus der IEShell Klasse holen. Wie Du das machst überlasse ich Dir.

    Es ist definitv einfacher Dein IE Instanz gleich in einem neuen Fenster anzulegen ...

    Abfragen ob Deine IE Instanz noch existiert oder geschlossen wurde:
    Am Besten setzt Du einien Try-Catch Block, oder Du benutzt das IE.ONQuit Event, was aufgerufen wird wenn entweder Dein Tab oder das gesamte Fenster geschlossen wird, und setzt Dir eine Boole'sche Variable.

    Verwenden des HTMLDocumentes: Ja, geht genau wie im WebBrowser Control.

    Hoffe ich hab Dich jetzt endgültig verwirrt :rolleyes:
    @ Kangaroo - Danke für deine Antwort, hatte bisher keine Zeit mich damit auseinander zusetzen.

    Möchte das WebbrowserControl nicht nutzen weil:

    1) Wenn ich darin einen Link anklicke öffnet sich dieser in einem IE Fenster, und das obwohl IE gar nicht mein Standard Browser ist

    2) Beim Aufrufen von manchen Seiten kommen teilweise Fehlermeldungen , die beim Aufrufen im Internet Explorer nicht kommen.

    3) Möchte das Rad nicht neu erfinden, deshalb IE.

    Werde in nächster Zeit mal dran gehen deine Vorschläge umzusetzen.