Ansluta till en instans av Internet Explorer som körs
Varning
Det indragna internet explorer 11-skrivbordsprogrammet som inte stöds har inaktiverats permanent via en Microsoft Edge-uppdatering på vissa versioner av Windows 10. Mer information finns i Internet Explorer 11 vanliga frågor och svar om tillbakadragning av skrivbordsappar.
Du kan använda SHDocVw.ShellWindows-samlingen för att ansluta till en instans av Internet Explorer som körs.
Ursprunglig produktversion: Internet Explorer
Ursprungligt KB-nummer: 176792
Mer information
Vanligtvis ansluter ett program till en instans av ett annat program som körs med hjälp av Running Object
tabellen. Eftersom Internet Explorer inte registrerar sig i objekttabellen som körs är en annan metod nödvändig.
ShellWindows-samlingen beskrivs i Internet Client SDK på följande sätt:
ShellWindows-objektet representerar en samling öppna fönster som tillhör gränssnittet. I själva verket innehåller den här samlingen referenser till Internet Explorer samt andra fönster som tillhör gränssnittet, till exempel Utforskaren i Windows.
Följande Visual Basic-kod hämtar en referens till ShellWindows-samlingen . Samlingen räknas upp och LocationName för varje objekt läggs till i en listruta. Om dokumentet som är associerat med objektet är av typen HTMLDocument (en webbsida) läggs sidans rubrik till i en annan listruta.
Om du vill köra följande kod måste du lägga till en referens till Microsoft Internet Controls (Shdocvw.dll) och Microsoft HTML Object Library (Mshtml.dll) i Visual Basic-projektet:
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
I C++, kan en anslutning utföras på ungefär samma sätt. Visual C++ Native COM-stöd används här för korthet.
Lägg till referenser till Shdocvw.dll och Mshtml.dll i projektet:
#import <mshtml.dll> // Internet Explorer 4.0x
#import <mshtml.tlb> // Internet Explorer 5
#import <shdocvw.dll>
Deklarera en instans av en IShellWindows-pekare i visningsklassen :
SHDocVw::IShellWindowsPtr m_spSHWinds;
Skapa en instans av ett ShellWindows-objekt i vyns konstruktor:
m_spSHWinds.CreateInstance(__uuidof(SHDocVw::ShellWindows));
Använd ShellWindows-objektet i vyns OnInitialUpdate-funktion :
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());
}
}
}
}
Den tidigare metoden för att ansluta till en instans av Internet Explorer som körs fungerar inte om Shell-integrering inte är installerad eller om Bläddra i en ny process har valts i Internet Explorer.
Om dessa faktorer inte kan kontrolleras finns det fortfarande en möjlig metod som kan fungera. Ett webbläsarhjälpobjekt kan skrivas för att registrera Internet Explorer i den aktiva objekttabellen (ROT). Det finns många implementeringar som är möjliga här beroende på hur programmet ska avgöra vilken instans av Internet Explorer som ska anslutas. Bara en möjlig lösning: Webbläsarhjälpobjektet, som har åtkomst till objektmodellen för den instans av Explorer som startade den, skulle avgöra om det här är instansen av webbläsaren som ska registreras i objekttabellen som körs.
Gränssnittet som konsumenten är intresserad av kan registreras i ROT med funktionen RegisterActiveObject och ett CLSID-dummy som konsumenten känner igen. En annan lösning, som skulle tillåta att flera instanser av utforskaren registreras i ROT, skulle vara att låta webbläsarhjälpobjektet skapa en objektmoniker baserat på ett GUID och data som är unika för varje instans av Internet Explorer. Monikern skulle registreras i ROT med IRunningObjectTable::Register
metoden . Återigen måste konsumenten veta hur man känner igen denna moniker.
Referenser
Mer information om Windows Shell SDK finns i Windows Shell.
Mer information om ger utvecklare som är specifika för Internet Explorer finns i Internet Explorer för utvecklare.
Feedback
Skicka och visa feedback för