龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++中如何显示/隐藏IE浏览器工具窗口

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
本文讲述如何在程序中控制显示/隐藏所有的IE浏览器工具窗口,如“收藏”,“历史”,“搜索”等左侧窗口。 实现流程: 在同一个时刻,系统中可能存在N个Shell窗口(包括IE窗口和文

  本文讲述如何在程序中控制显示/隐藏所有的IE浏览器工具窗口,如“收藏”,“历史”,“搜索”等左侧窗口。

  

  实现流程:

  在同一个时刻,系统中可能存在N个Shell窗口(包括IE窗口和文件浏览器窗口),需要遍历每个Shell窗口并将文件浏览器窗口排除(因为我们只对IE窗口进行处理),然后再取得IWebBrowser2,调用ShowBrowserBar函数,这个函数在MSDN中描述如下:

  HRESULT ShowBrowserBar(VARIANT *pvaClsid,

   VARIANT *pvarShow,

   VARIANT *pvarSize

  );

  

  可重用代码如下(已经过测试,无法编译者请查自身的问题或咨询ccrun):

  

  #pragma link "bcbie.lib"

  #include "SHDocVw_OCX.h"

  //---------------------------------------------------------------------------

  void __fastcall MyShowIEBrowserBar(LPSTR lpCLSID, bool bShow)

  {

   Variant v1, v2, v3;

   String strCLSID(lpCLSID);

   v1 = strCLSID.c_str(); // 要显示/隐藏的工具窗口CLSID

   v2 = bShow; // 是否显示

   v3 = 0; // 略

  

   //---------------------------------------------------------------------------

   // 抱歉,这个提示又来了,为了防止不负责任的转载者,只好在此留些信息。

   // by ccrun(老妖) info@ccrun.com

   // 欢迎访问 C++Builder研究 - http://www.ccrun.com

   //---------------------------------------------------------------------------

  

   TCppShellWindows *pShellWin = new TCppShellWindows(NULL);

   // 遍历每个Shell窗口

   for(int i=0; iCount; i++)

   {

   IDispatch *pDisp = (IDispatch *)pShellWin->Item(Variant(i));

   if(pDisp == NULL)

   continue;

   // 取得IWebBrowser2接口

   IWebBrowser2 *pBrowser;

   HRESULT hr = pDisp->QueryInterface(IID_IWebBrowser2, (void**)&pBrowser);

   pDisp->Release();

   if(SUCCEEDED(hr))

   {

   String strUrl = String(pBrowser->get_LocationURL()); // 获取浏览器地址

   if(strUrl.LowerCase().SubString(1, 5) == "file:") // 排除文件治理器

   continue;

   pBrowser->ShowBrowserBar(v1, v2, v3); // 显示或隐藏浏览工具窗口

   }

   }

   delete pShellWin;

  }

  

  // MyShowIEBrowserBar("{EFA24E61-B078-11d0-89E4-00C04FC9E26E}", 1); // 显示收藏夹

  // MyShowIEBrowserBar("{30D02401-6A81-11d0-8274-00C04FD5AE38}", 0); // 隐藏搜索栏

  

  其他IE工具窗口CLSID参考:

  Favorites {EFA24E61-B078-11d0-89E4-00C04FC9E26E}

  Folders {EFA24E64-B078-11d0-89E4-00C04FC9E26E}

  History {EFA24E62-B078-11d0-89E4-00C04FC9E26E}

  Search {30D02401-6A81-11d0-8274-00C04FD5AE38}

  

  

精彩图集

赞助商链接