Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ostrzeżenie
Wycofana, nieobsługiwana aplikacja klasyczna Internet Explorer 11 ma zostać trwale wyłączona za pośrednictwem aktualizacji aplikacji Microsoft Edge dla niektórych wersji systemu Windows 10. Aby uzyskać więcej informacji, zobacz artykuł pt. Często zadawane pytania dotyczące wycofywania aplikacji klasycznej Internet Explorer 11.
Możesz użyć kolekcji SHDocVw.ShellWindows, aby nawiązać połączenie z działającym wystąpieniem programu Internet Explorer.
Oryginalna wersja produktu: Internet Explorer
Oryginalny numer KB: 176792
Więcej informacji
Zazwyczaj aplikacja przy użyciu Running Object
tabeli łączy się z uruchomionym wystąpieniem innej aplikacji. Ponieważ program Internet Explorer nie rejestruje się w uruchomionej tabeli obiektów, konieczna jest inna metoda.
Kolekcja ShellWindows jest opisana w zestawie SDK klienta internetowego w następujący sposób:
Obiekt ShellWindows reprezentuje kolekcję otwartych okien należących do powłoki. W rzeczywistości ta kolekcja zawiera odwołania do programu Internet Explorer a także do innych okien należących do powłoki, takich jak Eksplorator Windows.
Poniższy kod języka Visual Basic uzyskuje odwołanie do kolekcji ShellWindows . Kolekcja jest wyliczana, a LocationName dla każdego obiektu dodana do listy. Jeśli dokument skojarzony z obiektem jest typu HTMLDocument (strona internetowa), tytuł strony zostanie dodany do innego pola listy.
Aby uruchomić następujący kod, należy dodać odwołanie do kontrolek internetowych firmy Microsoft (Shdocvw.dll) i biblioteki obiektów HTML firmy Microsoft (Mshtml.dll) do projektu 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
W języku C++połączenie można wykonać w mniej więcej taki sam sposób. W celu zwięzłości korzysta się tutaj z natywnej obsługi COM w Visual C++.
Dodaj odwołania do Shdocvw.dll i Mshtml.dll do projektu:
#import <mshtml.dll> // Internet Explorer 4.0x
#import <mshtml.tlb> // Internet Explorer 5
#import <shdocvw.dll>
Zadeklaruj wystąpienie wskaźnika IShellWindows w klasie widoku:
SHDocVw::IShellWindowsPtr m_spSHWinds;
Utwórz wystąpienie obiektu ShellWindows w konstruktorze widoku:
m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
Użyj obiektu ShellWindows w funkcji OnInitialUpdate widoku:
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());
}
}
}
}
Poprzednia metoda łączenia się z uruchomioną instancją programu Internet Explorer nie działa, jeśli Integracja powłoki nie jest zainstalowana lub jeśli w programie Internet Explorer wybrano opcję Przeglądaj w nowym procesie.
Jeśli nie można kontrolować tych czynników, nadal istnieje jedna możliwa metoda, która może działać. Obiekt pomocnika przeglądarki można zapisać w celu zarejestrowania programu Internet Explorer w uruchomionej tabeli obiektów (ROT). Istnieje wiele możliwych implementacji w zależności od tego, jak aplikacja ma ustalić instancję Internet Explorer, z którą ma się połączyć. Tylko jedno możliwe rozwiązanie: obiekt pomocnika przeglądarki, mający dostęp do modelu obiektów wystąpienia Eksploratora, które go uruchomił, określi, czy jest to wystąpienie przeglądarki, które powinno zostać zarejestrowane w uruchomionej tabeli obiektów.
Interfejs, którym jest zainteresowany użytkownik, można zarejestrować w ROT za pomocą funkcji RegisterActiveObject oraz fikcyjnego identyfikatora CLSID, który zostanie rozpoznany przez użytkownika. Innym rozwiązaniem, które umożliwiłoby zarejestrowanie wielu wystąpień programu Internet Explorer w ROT, byłoby utworzenie obiektu pomocnika przeglądarki poprzez złożenie identyfikatora Item moniker na podstawie identyfikatora GUID i danych unikatowych dla każdego wystąpienia programu Internet Explorer. Pseudonim zostanie zarejestrowany w ROT za pomocą metody IRunningObjectTable::Register
. Ponownie konsument musiałby wiedzieć, jak rozpoznać ten pseudonim.
Źródła
Aby uzyskać więcej informacji na temat zestawu Windows Shell SDK, zobacz Powłoka systemu Windows.
Aby uzyskać więcej informacji o zasobach dla deweloperów specyficznych dla Internet Explorer, zobacz Internet Explorer for Developers.