Подключение к работающему экземпляру Интернет-Обозреватель

Предупреждение

Устаревшее и не поддерживаемое классическое приложение Internet Explorer 11 было окончательно отключено путем обновления Microsoft Edge в некоторых версиях Windows 10. Дополнительные сведения см. в разделе Часто задаваемые вопросы о прекращении поддержки программы для настольных компьютеров Internet Explorer 11.

Вы можете использовать коллекцию SHDocVw.ShellWindows для подключения к работающему экземпляру Internet Обозреватель.

Исходная версия продукта: Интернет-Обозреватель
Исходный номер базы знаний: 176792

Дополнительная информация

Как правило, приложение подключается к работающему экземпляру другого приложения с помощью Running Object таблицы. Так как интернет-Обозреватель не регистрируется в таблице выполняющихся объектов, необходим другой метод.

Коллекция ShellWindows описана в пакете SDK для интернет-клиента следующим образом:

Объект ShellWindows представляет коллекцию открытых окон, принадлежащих оболочке. В действительности эта коллекция содержит ссылки на интернет-Обозреватель, а также на другие окна, принадлежащие оболочке, такие как windows Обозреватель.

Следующий код Visual Basic получает ссылку на коллекцию ShellWindows . Коллекция перечисляется и имя_расположения для каждого объекта, добавленного в список. Если документ, связанный с объектом, имеет тип HTMLDocument (веб-страница), заголовок страницы добавляется в другое поле списка.

Чтобы выполнить следующий код, необходимо добавить ссылку на microsoft Internet Controls (Shdocvw.dll) и библиотеку объектов Microsoft HTML (Mshtml.dll) в проект Visual Basic:

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

В C++ соединение может быть выполнено примерно таким же образом. Поддержка visual C++ Native COM используется здесь для краткости.

Добавьте ссылки на Shdocvw.dll и Mshtml.dll в проект:

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

Объявите экземпляр указателя IShellWindows в классе представления:

SHDocVw::IShellWindowsPtr m_spSHWinds;

Создайте экземпляр объекта ShellWindows в конструкторе представления:

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

Используйте объект ShellWindows в функции OnInitialUpdate представления:

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());
            }
        }
    }
}

Предыдущий метод подключения к работающему экземпляру интернет-Обозреватель не работает, если интеграция оболочки не установлена или если в Обозреватель Интернета выбран пункт Обзор в новом процессе.

Если эти факторы нельзя контролировать, существует еще один возможный метод, который может работать. Вспомогательный объект браузера можно записать для регистрации интернет-Обозреватель в таблице запущенных объектов (ROT). Здесь можно реализовать множество реализаций в зависимости от того, как приложение определяет экземпляр Обозреватель Интернета, с которым необходимо подключиться. Только одно возможное решение: вспомогательный объект браузера, имеющий доступ к объектной модели экземпляра Обозреватель, который его запустил, определит, является ли этот экземпляр браузера, который должен быть зарегистрирован в таблице выполняющихся объектов.

Интерфейс, интересующий потребителя, можно зарегистрировать в ROT с помощью функции RegisterActiveObject и фиктивного идентификатора CLSID, распознаваемого потребителем. Другим решением, которое позволило бы зарегистрировать в ROT несколько экземпляров обозревателя, будет создание вспомогателя браузера моникера элемента на основе GUID и фрагмента данных, уникальных для каждого экземпляра internet Обозреватель. Моникер будет зарегистрирован в ROT с IRunningObjectTable::Register помощью метода . Опять же, потребитель должен знать, как распознать этот моникер.

Ссылки

Дополнительные сведения о пакете SDK оболочки Windows см. в статье Оболочка Windows.

Дополнительные сведения о возможностях для разработчиков, относящихся к интернет-Обозреватель, см. в разделе Интернет-Обозреватель для разработчиков.