Internet Explorer'ın çalışan bir örneğine bağlanma

Uyarı

Kullanımdan kaldırılan, destek dışı Internet Explorer 11 masaüstü uygulaması, Windows 10'un belirli sürümlerinde Microsoft Edge güncelleştirmesi aracılığıyla kalıcı olarak devre dışı bırakılmıştır. Daha fazla bilgi için bkz. Internet Explorer 11 masaüstü uygulamasının kullanımdan kaldırılması hakkında SSS.

Internet Explorer'ın çalışan bir örneğine bağlanmak için SHDocVw.ShellWindows koleksiyonunu kullanabilirsiniz.

Orijinal ürün sürümü: Internet Explorer
Özgün KB numarası: 176792

Daha fazla bilgi

Genellikle, bir uygulama tabloyu kullanarak başka bir uygulamanın çalışan bir örneğine Running Object bağlanır. Internet Explorer kendisini çalışan nesne tablosuna kaydetmediğinden başka bir yöntem gereklidir.

ShellWindows koleksiyonu internet istemci SDK'sında aşağıdaki gibi açıklanmıştır:

ShellWindows nesnesi, kabuğa ait açık pencerelerin bir koleksiyonunu temsil eder. Aslında, bu koleksiyon Internet Explorer'ın yanı sıra Kabuk'a ait Windows Gezgini gibi diğer pencerelere başvurular içerir.

Aşağıdaki Visual Basic kodu ShellWindows koleksiyonuna bir başvuru alır. Koleksiyon numaralandırılır ve liste kutusuna eklenen her nesne için LocationName . Nesneyle ilişkilendirilmiş belge HTMLDocument (Web Sayfası) türündeyse, sayfanın başlığı başka bir liste kutusuna eklenir.

Aşağıdaki kodu çalıştırmak için, Visual Basic projesine Microsoft internet denetimleri (Shdocvw.dll) ve Microsoft HTML Nesne Kitaplığı (Mshtml.dll) başvurusu eklemek gerekir:

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++'ta, bir bağlantı kabaca aynı şekilde gerçekleştirilebilir. Visual C++ Yerel COM Desteği burada kısa bir süre için kullanılır.

projeyeShdocvw.dll ve Mshtml.dll başvuruları ekleyin:

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

Görünüm sınıfınızda bir IShellWindows işaretçisi örneği bildirin:

SHDocVw::IShellWindowsPtr m_spSHWinds;

Görünümünüzün oluşturucusunda ShellWindows nesnesinin bir örneğini oluşturun:

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

Görünümünüzün OnInitialUpdate işlevinde ShellWindows nesnesini kullanın:

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

Kabuk Tümleştirmesi yüklü değilse veya Internet Explorer'da yeni bir işlemde gözat seçiliyse, Internet Explorer'ın çalışan bir örneğine bağlanmak için önceki yöntem çalışmıyor.

Bu faktörler denetlenemiyorsa, yine de işe yarayabilecek tek bir olası yöntem vardır. Internet Explorer'ı çalışan nesne tablosuna (ROT) kaydetmek için tarayıcı yardımcı nesnesi yazılabilir. Burada, uygulamanın bağlanacak Internet Explorer örneğini belirlemeye bağlı olarak birçok uygulama vardır. Tek bir olası çözüm: Tarayıcıyı başlatan Explorer örneğinin nesne modeline erişimi olan tarayıcı yardımcı nesnesi, bunun çalışan nesne tablosuna kaydedilmesi gereken tarayıcı örneği olup olmadığını belirler.

Tüketicinin ilgilendiği arabirim, REGISTERActiveObject işlevi ve tüketicinin tanıyacağı sahte bir CLSID ile ROT'ye kaydedilebilir. Gezginin birden çok örneğinin ROT'a kaydedilmesine izin veren başka bir çözüm, Tarayıcı Yardımcısı nesnesinin GUID'ye ve Internet Explorer'ın her örneğine özgü bir veri parçasına dayalı bir Öğe adı oluşturmasını sağlamaktır. Ad, yöntemiyle IRunningObjectTable::Register ROT'ye kaydedilecek. Yine tüketicinin bu takma adı nasıl tanıyacağını bilmesi gerekir.

Başvurular

Windows Shell SDK'sı hakkında daha fazla bilgi için bkz. Windows Kabuğu.

Internet Explorer'a özgü geliştirici sağlama hakkında daha fazla bilgi için bkz. Geliştiriciler için Internet Explorer.