求救:
3个关于IE Explorer band(注册为了CATID_InfoBand组件类型)的问题(分不够再开贴加!已经查了几天的资料都没解决)1。用ATL写的一个ExplorerBand(注册为CATID_InfoBand组件类型),启动IE显示该band,再关闭IE,第二次再启动IE则创建并且显示该band,如何使IE每次启动都不创建该band也不显示了?2。该band在注册表中HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\WebBrowser\{CLSID}的值为0101e4000000是什么意思了?3。通过IE的IWebBrowser接口的ShowBrowser方法可以show/hide某个ExplorerBand。但是得到IE的IWebBrowser,Idocument等等接口有没有办法获得当前IE是否显示了某个ExplorerBand(CATID_InfoBand),并且得到ExplorerBand的相关的接口或者是Explorerband的窗口句柄了?
查了半天的资料都没解决,希望大家多帮帮忙!先谢谢了!

解决方案 »

  1.   

    第一个问题我也想知道,IE启动哪个栏会记忆在某个地方,应该是注册表。只需找到注册表键值,在
    你的BAND退出之前修改就可以,写了哪个注册表用REGMON跟踪一下。
    第三个问题和第一个其实是一样的,你切换到哪个BAND,IE是立即将该栏的信息保存,可能是写到注册表,BAND可能是IE自带的,也可能是第三方的,你能研究出IE信息如何保存就可以知道这些东东了
      

  2.   

    好像不是记录在注册表中,我用REGMON跟踪过了,注册表根本就没有什么变化
      

  3.   

    第一个问题知道了,是保存在
    HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Toolbar\WebBrowser\ITBarLayout中,不过是一个很大的数据结构,其中每次显示band的时候会写入band的clsid到该结构中某处,如:
    11,00,00,00,5c,00,00,00,00,00,00,00,34,00,00,00,1f,00,00,00,\
      52,00,00,00,01,00,00,00,20,07,00,00,a0,0f,00,00,05,00,00,00,62,05,00,00,26,\
      00,00,00,02,00,00,00,21,07,00,00,a0,0f,00,00,04,00,00,00,21,01,00,00,a0,0f,\
      00,00,03,00,00,00,20,03,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
      00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
    clsid大概保存在结构的尾部,0表示什么都不显示。不过这个结构到底是什么结构了?谢谢lbird(★郑恒★)的提醒了另外第3个问题我估计可没有lbird(★郑恒★)所说的那么简单了。切换到哪个BAND,IE根本没有保存该栏的信息(regMon观察的结果)。我想即使保存但是也不可能根据这些信息得到Band的接口(得到band的接口可以对该band进行控制了)。
      

  4.   

    IE的BAND具有记忆功能,要实现记忆肯定是要保存的。
    IE是通过ShowBrowserBar方法来显示某个BAND的,而这个函数的第一个参数就是要求BAND的CLISD信息。所以保存的信息可以直接或间接地得到BAND的CLISD。
    这个问题我也想找个时间弄清楚,下周来再研究了:)
      

  5.   

    第3个问题如果要的到band的接口我觉得有些难度。不过能不能利用Accessibility(当然要2000以上的支持):
    得到了WebBrowser的接口,就可以通过该接口得到IE的主窗口了,再取得band的父窗口IE主窗口的子窗口即“basebar”类的窗口从而应该可以利用Accessibility得到Container的IOleWindow及其相关的接口,从而可以进一步获取band的相关信息。