In many cases, developers of band objects want to be able to automatically
display their band object when the user starts a new instance of Internet
Explorer. The best way to achieve this functionality is to use a Browser Helper Object (BHO) in conjunction with the band object. In this way, the BHO can decide whether or not to programmatically activate the band object based on registry keys or other settings persisted by the band object itself.
To build a minimal BHO that can programmatically activate a band object (the Search bar, in this example), you can create a new ATL/COM AppWizard project and add a new Internet Explorer object. Then, override
IObjectWithSite::SetSite to achieve the desired functionality. The new SetSite implementation should look as follows:
STDMETHODIMP CShowBarObj::SetSite(IUnknown *pUnkSite)
{
if (NULL != pUnkSite)
{
IWebBrowser2 *pBrowser = NULL;
// Ensure that our site is an browser window
HRESULT hr = pUnkSite->QueryInterface(IID_IWebBrowser2, (void **) &pBrowser);
if (SUCCEEDED(hr))
{
// Display the band object (the Search bar in this case)
VARIANT vtBandGUID, vtShow;
vtBandGUID.vt = VT_BSTR;
vtBandGUID.bstrVal = SysAllocString(OLESTR("{30D02401-6A81-11D0-8274-00C04FD5AE38}"));
vtShow.vt = VT_BOOL;
vtShow.boolVal = true;
pBrowser->ShowBrowserBar(&vtBandGUID, &vtShow, 0);
SysFreeString(vtBandGUID.bstrVal);
pBrowser->Release();
}
}
return S_OK;
}
Also, you must include the header file ExDisp.h in the code and append the following code to the RGS file used for DLL self-registration. Note that you must replace "{77D54ACE-09A9-11D4-8ACE-00C04F542830}" with the CLSID of your BHO:
HKLM {
SOFTWARE {
Microsoft {
Windows {
CurrentVersion {
Explorer {
'Browser Helper Objects' {
{77D54ACE-09A9-11D4-8ACE-00C04F542830}
}
}
}
}
}
}
}