Herstellen einer Verbindung mit einer ausgeführten instance von Internet Explorer

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 SAMMLUNG SHDocVw.ShellWindows verwenden, um eine Verbindung mit einer ausgeführten instance von Internet Explorer herzustellen.

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

Weitere Informationen

In der Regel stellt eine Anwendung mithilfe Running Object der Tabelle eine Verbindung mit einer ausgeführten instance einer anderen Anwendung her. Da internet Explorer sich 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. Tatsächlich enthält diese Sammlung Verweise auf internet-Explorer sowie andere Fenster, die zur Shell gehören, z. B. die Windows-Explorer.

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

Um den folgenden Code auszuführen, muss dem Visual Basic-Projekt ein Verweis auf Microsoft-Internetsteuerelemente (Shdocvw.dll) und die Microsoft HTML-Objektbibliothek (Mshtml.dll) hinzugefügt werden:

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 hergestellt werden. Die native COM-Unterstützung von Visual C++ wird hier aus Gründen der Übersichtlichkeit verwendet.

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

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

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

SHDocVw::IShellWindowsPtr m_spSHWinds;

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

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

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

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 instance des Internet-Explorer funktioniert nicht, wenn die Shellintegration nicht installiert ist oder wenn In einem neuen Prozess durchsuchen in Internet Explorer ausgewählt ist.

Wenn diese Faktoren nicht kontrolliert werden können, gibt es immer 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 sind viele Implementierungen möglich, je nachdem, wie die Anwendung ist, um die instance der Internet-Explorer zu bestimmen, mit denen eine Verbindung hergestellt werden soll. Nur eine mögliche Lösung: Das Browserhilfsobjekt, das Zugriff auf das Objektmodell des instance von Explorer hat, von dem es gestartet wurde, würde bestimmen, ob dies der instance des Browsers ist, der in der ausgeführten Objekttabelle registriert werden soll.

Die Schnittstelle, an der der Consumer interessiert ist, kann im ROT mit der Funktion RegisterActiveObject und einer Dummy-CLSID registriert werden, die der Consumer erkennt. Eine andere Lösung, bei der mehrere Instanzen des Explorers in rot registriert werden können, besteht darin, dass das Browserhilfsprogrammobjekt einen Item-Moniker basierend auf einer GUID und einem für jeden instance von Internet Explorer eindeutigen Daten erstellt. Der Moniker wird im ROT mit der IRunningObjectTable::Register -Methode registriert. Auch hier müsste der Verbraucher wissen, wie er diesen Moniker erkennt.

References

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

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