Подключение к работающему экземпляру Интернет-Обозреватель
Предупреждение
Устаревшее и не поддерживаемое классическое приложение 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.
Дополнительные сведения о возможностях для разработчиков, относящихся к интернет-Обозреватель, см. в разделе Интернет-Обозреватель для разработчиков.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по