So stellen Sie eine Verbindung mit einer ausgeführten Instanz von Internet Explorer her

Warnung

Die eingestellte, nicht mehr unterstützte Desktop-Anwendung Internet Explorer 11 wurde durch ein Microsoft Edge-Update in bestimmten Versionen von Windows 10 dauerhaft deaktiviert. Weitere Informationen finden Sie unter Häufig gestellte Fragen zur Einstellung der Desktop-App von Internet Explorer 11.

Sie können die SHDocVw.ShellWindows-Auflistung verwenden, um eine Verbindung mit einer ausgeführten Instanz von Internet Explorer herzustellen.

Originalproduktversion: Internet Explorer
Ursprüngliche KB-Nummer: 176792

Weitere Informationen

In der Regel stellt eine Anwendung mithilfe der Running Object Tabelle eine Verbindung mit einer ausgeführten Instanz einer anderen Anwendung dar. Da sich Internet Explorer nicht in der ausgeführten Objekttabelle registriert, ist eine andere Methode erforderlich.

Die ShellWindows-Auflistung wird im Internet Client SDK wie folgt beschrieben:

Das ShellWindows -Objekt stellt eine Auflistung der geöffneten Fenster dar, die zur Shell gehören. In der Tat enthält diese Auflistung Verweise auf Internet Explorer sowie andere Fenster, die zur Shell gehören, z. B. windows Explorer.

Der folgende Visual Basic-Code ruft einen Verweis auf die ShellWindows-Auflistung ab. Die Auflistung wird aufgezählt und der LocationName für jedes Objekt, das einem Listenfeld hinzugefügt wird. Wenn das dem Objekt zugeordnete Dokument vom Typ HTMLDocument (eine Webseite) ist, wird der Titel für die Seite einem anderen Listenfeld hinzugefügt.

Zum Ausführen des folgenden Codes ist es erforderlich, dem Visual Basic-Projekt einen Verweis auf Microsoft Internet Controls (Shdocvw.dll) und die Microsoft HTML-Objektbibliothek (Mshtml.dll) hinzuzufügen:

VB
Dim SWs As New SHDocVw.ShellWindows
Dim IE As SHDocVw.InternetExplorer

Private Sub Form_Load()
    Dim Doc
    List1.Clear
    List2.Clear

    Text1.Text = SWs.count

    For Each IE In SWs
        List1.AddItem IE.LocationName

        Set Doc = IE.Document
        If TypeOf Doc Is HTMLDocument Then
            'if this is an HTML page, display the title
            'may or may not be the same as LocationName
            List2.AddItem Doc.Title
        End If
    Next
End Sub

In C++ kann eine Verbindung ungefähr auf die gleiche Weise erreicht werden. Visual C++ Native COM-Unterstützung wird hier aus Platzgründen verwendet.

Fügen Sie dem Projekt Verweise auf Shdocvw.dll und Mshtml.dll hinzu:

VB
#import <mshtml.dll> // Internet Explorer 4.0x
#import <mshtml.tlb> // Internet Explorer 5
#import <shdocvw.dll>

Deklarieren Sie eine Instanz eines IShellWindows-Zeigers in Ihrer Ansichtsklasse :

VB
SHDocVw::IShellWindowsPtr m_spSHWinds;

Erstellen Sie eine Instanz eines ShellWindows-Objekts im Konstruktor Ihrer Ansicht:

VB
m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));

Verwenden Sie das ShellWindows-Objekt in der OnInitialUpdate-Funktion Ihrer Ansicht:

VB
void CConnectIEView::OnInitialUpdate()
{
    CFormView::OnInitialUpdate();

    ASSERT(m_spSHWinds != NULL);

    CString strCount;
    long nCount = m_spSHWinds->GetCount();

    strCount.Format("%i", nCount);
    m_strWinCount = strCount;

    UpdateData(FALSE);

    IDispatchPtr spDisp;
    for (long i = 0; i < nCount; i++)
    {
        _variant_t va(i, VT_I4);
        spDisp = m_spSHWinds->Item(va);

        SHDocVw::IWebBrowser2Ptr spBrowser(spDisp);
        if (spBrowser != NULL)
        {
            m_ctlListLoc.AddString(spBrowser->GetLocationName());

            MSHTML::IHTMLDocument2Ptr spDoc(spBrowser->GetDocument());
            if (spDoc != NULL)
            {
                m_ctlListTitle.AddString(spDoc->Gettitle());
            }
        }
    }
}

Die vorherige Methode zum Herstellen einer Verbindung mit einer ausgeführten Instanz von Internet Explorer funktioniert nicht, wenn die Shellintegration nicht installiert ist oder wenn "Durchsuchen in einem neuen Prozess " in Internet Explorer ausgewählt ist.

Wenn diese Faktoren nicht kontrolliert werden können, gibt es noch eine mögliche Methode, die funktionieren kann. Ein Browserhilfsobjekt kann geschrieben werden, um Internet Explorer in der ausgeführten Objekttabelle (ROT) zu registrieren. Hier gibt es viele Implementierungen, je nachdem, wie die Anwendung die Instanz von Internet Explorer bestimmt, mit der eine Verbindung hergestellt werden soll. Nur eine mögliche Lösung: Das Browserhilfsobjekt, das Zugriff auf das Objektmodell der Instanz von Explorer hat, die sie gestartet hat, würde bestimmen, ob dies die Instanz des Browsers ist, die in der ausgeführten Objekttabelle registriert werden soll.

Die Schnittstelle, an der der Verbraucher interessiert ist, kann mit der RegisterActiveObject-Funktion und einer Dummy CLSID, die der Verbraucher erkennt, in der ROT registriert werden. Eine andere Lösung, die es mehreren Instanzen des Explorers ermöglicht, in rot registriert zu werden, wäre, dass das Browserhilfsobjekt einen Item-Moniker basierend auf einer GUID und Datenelemente erstellt, die für jede Instanz von Internet Explorer eindeutig sind. Der Moniker wäre in der ROT mit der IRunningObjectTable::Register Methode registriert. Auch hier müsste der Verbraucher wissen, wie man diesen Moniker erkennt.

References

Weitere Informationen zum Windows Shell SDK finden Sie unter Windows Shell.

Weitere Informationen zu entwicklerspezifischen Informationen zu Internet Explorer finden Sie unter Internet Explorer für Entwickler.