FAQ:启动IE时自动显示工具条

——谨以怀念写邮件回答网友关于Internet Explorer编程问题的青春岁月

Posted by eagleboost on September 22, 2004

本文转载自我2004年在csdn发布的博客

eagleboost,您好! 在csdn上看到你以前写的关于IE编程方面的文章,看得出来你对这方面非常熟悉。我现在有个问题想请教一下你,就是我已经做了一个类似google工具条的东西,已经注册了,但要自己去右键菜单勾上才能显示出来。我想让它一注册,ie就默认将其显示出来,不知道要修改注册表什么地方? 麻烦你解答一下,非常感谢!

2004-09-22

你的问题比较常见。标准的,也是最好的办法是在你的工具条之外再实现一个Browser Helper Object(BHO),比如下面的CShowBarObj,并在IObjectWithSite::SetSite方法中调用IWebBrowser2ShowBrowserBar函数来显示你的工具条。VC中的例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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;         
      //把这里的CLSID换成你的工具条CLSID         
      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;
}