Connecting to a running instance of Internet Explorer

Methods to connect to a running instance of IE

provided by: 
Originally published at Internet.com


There are some methods to connect to a running instance of IE. This one is how to connect through the ROT (Running Object Table).

Usually, an application connects to a running instance of another application using the Running Object table. However the Internet Explorer 4.0 doesn't not register itself in ROT. The solution is to write so-called "Browser Helper Object" – a tiny COM object that exposes IObjectWithSite interface and register itself in the ROT. Also it's necessary to register this object in the Registry under the following key: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects\ The Internet Explorer will create new instance of each Browser Helper Object listed in registry every time new instance of Internet Expoler is started. HKLM\SOFTWARE\Microsoft\Windows \CurrentVersion\Explorer\Browser Helper Objects\{CE7C3CF0-4B15- 11D1-ABED-709549C10000}

The following code demonstrates how to allow multiple instances of the Internet Explorer to be registered in the ROT using item moniker. ///////////////////////////////////////////////////////////////////////////// IEHELPER.H #ifndef __IEHELPER_H_ #define __IEHELPER_H_ #include "resource.h" // main symbols ///////////////////////////////////////////////////////////////////////////// // CIEHelper class CIEHelper : public CComObjectRootEx, public CComCoClass, public IObjectWithSiteImpl, public IIEHelper { public: CIEHelper() { m_dwROTID = 0; } _1_CIEHelper() { } // IObjectWithSite interface STDMETHOD(SetSite)(IUnknown* pUnkSite); DECLARE_REGISTRY_RESOURCEID(IDR_IEHELPER) BEGIN_COM_MAP(CIEHelper) COM_INTERFACE_ENTRY(IIEHelper) COM_INTERFACE_ENTRY(IObjectWithSite) END_COM_MAP() // IIEHelper public: void SetROTID(DWORD dwValue) { m_dwROTID = dwValue; } private: DWORD m_dwROTID; void ROT_UnRegister(); void ROT_Register(); }; #endif //__IEHELPER_H_ /////////////////////////////////////////////////////////////////// IEHELPER.CPP // IEHelper.cpp : Implementation of CIEHelper #include "stdafx.h" #include "IE.h" #include "IEHelper.h" #include #include // the IID_IWebBrowser is located over there #include ///////////////////////////////////////////////////////////////////////////// // CIEHelper // // CObjectWithSite Methods // STDMETHODIMP CIEHelper::SetSite(IUnknown* pUnkSite) { USES_CONVERSION; // remove previously registered object from the table ROT_UnRegister(); // neccessary initialization HRESULT hResult = IObjectWithSiteImpl::SetSite(pUnkSite); // register helper object in the running object table ROT_Register(); return hResult; } /////////////////////////////////////////////////////////////////////////// // // // Private Section // const static TCHAR* szMonikerTemplateName = _T("Browser Helper Object"); // // register the object in the running object table // void CIEHelper::ROT_Register() { CComPtr pTable; if(GetRunningObjectTable(0, &pTable) == S_OK) { CComBSTR bstrItemName; CComPtr pMoniker; TCHAR szBuffer[1024]; sprintf(szBuffer, "%s | %d", szMonikerTemplateName, m_spUnkSite); bstrItemName = szBuffer; if(CreateItemMoniker(NULL, bstrItemName, &pMoniker) == S_OK) { DWORD dwRegister; if(pTable->Register(1, (IUnknown*)this, pMoniker, &dwRegister) == S_OK) { SetROTID(dwRegister); ATLTRACE("IIEHelper: the moniker %s has been registered successfully\n", szBuffer); } else { ATLTRACE("IIEHelper: failed to register moniker % s in the ROT\n", szBuffer); } } else { ATLTRACE("IIEHelper: failed to create moniker %s\n", szBuffer); } } else { ATLTRACE("IIEHelper: Could not retrieve the ROT pointer\n"); } } void CIEHelper::ROT_UnRegister() { CComPtr pTable; if(GetRunningObjectTable(0, &pTable) == S_OK) { HRESULT hRes = pTable->Revoke(m_dwROTID); ATLTRACE("IIEHelper: ID = %d, result code %x\n", m_dwROTID, hRes); } SetROTID(0); } ////////////////////////////////////////////////////////////////////// IEHELPER.RGS // The following lines should be included into the self-registration portion of // COM application... HKLM { SOFTWARE { Microsoft { Windows { CurrentVersion { Explorer { 'Browser Helper Objects' { } } } } } } } ...

Read article at Internet.com site
Regional Articles
- Connecting to a running instance of Internet Explorer Alabama
- Connecting to a running instance of Internet Explorer Alaska
- Connecting to a running instance of Internet Explorer Arizona
- Connecting to a running instance of Internet Explorer Arkansas
- Connecting to a running instance of Internet Explorer California
- Connecting to a running instance of Internet Explorer Colorado
- Connecting to a running instance of Internet Explorer Connecticut
- Connecting to a running instance of Internet Explorer DC
- Connecting to a running instance of Internet Explorer Delaware
- Connecting to a running instance of Internet Explorer Florida
- Connecting to a running instance of Internet Explorer Georgia
- Connecting to a running instance of Internet Explorer Hawaii
- Connecting to a running instance of Internet Explorer Idaho
- Connecting to a running instance of Internet Explorer Illinois
- Connecting to a running instance of Internet Explorer Indiana
- Connecting to a running instance of Internet Explorer Iowa
- Connecting to a running instance of Internet Explorer Kansas
- Connecting to a running instance of Internet Explorer Kentucky
- Connecting to a running instance of Internet Explorer Louisiana
- Connecting to a running instance of Internet Explorer Maine
- Connecting to a running instance of Internet Explorer Maryland
- Connecting to a running instance of Internet Explorer Massachusetts
- Connecting to a running instance of Internet Explorer Michigan
- Connecting to a running instance of Internet Explorer Minnesota
- Connecting to a running instance of Internet Explorer Mississippi
- Connecting to a running instance of Internet Explorer Missouri
- Connecting to a running instance of Internet Explorer Montana
- Connecting to a running instance of Internet Explorer Nebraska
- Connecting to a running instance of Internet Explorer Nevada
- Connecting to a running instance of Internet Explorer New Hampshire
- Connecting to a running instance of Internet Explorer New Jersey
- Connecting to a running instance of Internet Explorer New Mexico
- Connecting to a running instance of Internet Explorer New York
- Connecting to a running instance of Internet Explorer North Carolina
- Connecting to a running instance of Internet Explorer North Dakota
- Connecting to a running instance of Internet Explorer Ohio
- Connecting to a running instance of Internet Explorer Oklahoma
- Connecting to a running instance of Internet Explorer Oregon
- Connecting to a running instance of Internet Explorer Pennsylvania
- Connecting to a running instance of Internet Explorer Rhode Island
- Connecting to a running instance of Internet Explorer South Carolina
- Connecting to a running instance of Internet Explorer South Dakota
- Connecting to a running instance of Internet Explorer Tennessee
- Connecting to a running instance of Internet Explorer Texas
- Connecting to a running instance of Internet Explorer Utah
- Connecting to a running instance of Internet Explorer Vermont
- Connecting to a running instance of Internet Explorer Virginia
- Connecting to a running instance of Internet Explorer Washington
- Connecting to a running instance of Internet Explorer West Virginia
- Connecting to a running instance of Internet Explorer Wisconsin
- Connecting to a running instance of Internet Explorer Wyoming

Rss   Delicious   Digg   Add To My Yahoo   Add To My Google   Bookmark   Search Plugin

Topics:
Architecture & Design Languages & Tools Project Management Web Services
Database Microsoft & .NET Security Wireless
Java Open Source Techniques XML