使用BHO扩展Windows资源管理器

时间:2014-07-27 09:28:45

标签: c++ windows shell windows-explorer shell-extensions

我正在尝试使用C ++中的自定义面板扩展whindows explorer(NOT IE),它应该如下所示:

enter image description here

这是我发现的类似问题(在C#中):   Similar question

问题是C#,已经得到了答案。

但我自己发现答案对我来说有点太简短了,这就是我得到的:

  1. 我应该实现BHO对象
  2. BHO对象应该实现IObjectWithSite和IDockingWindow
  3. 在SetSite方法中,调用 QueryInterface 获取服务提供者的指针,然后调用 QueryService 获取Docking窗口框架的指针,最后调用 AddToolBar 添加我的自定义窗口。 以及我迷路的地方
  4. 我的问题是:

    1. 我应该在什么时候创建自定义窗口?在初始化对象期间?
    2. 我想我应该得到一个父窗口的句柄(在我的情况下,我认为它应该是Windows资源管理器的句柄),然后我才能创建自己的窗口,这将是它的孩子,其中我能得到这个手柄吗?用对接窗框的指针?
    3. 我该如何注册我的dll?我读了一些预览处理程序的示例代码,我们必须在系统调用之前正确注册dll吗?
    4. 我试图重现类似问题几天所说的话,但现在没有运气。

      我对BHO和所有这些事情都很陌生,请帮助我解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:1)

对于这样的Explorer扩展,我创建了2个对象。首先实现BHO(IDispatch和IObjectWithSite)。第二个实现IObjectWithSite,IOleWindow,IDockingWindow,IInputObject和IOleCommandTarget。

1)显示窗口的逻辑取决于你想要实现的目标。

2)你可以进入Second.SetSite的父窗口:

Site.QueryInterface(IDockingWindowSite, FDockingWindowSite);
FDockingWindowSite.GetWindow(FParent);

3)只需将您的BHO注册为标准BHO。

我花了很长时间来创建和调试此类扩展。如果你不是这个领域的专家再想一想 - 你真的需要这个功能吗?但如果你真的认为自己需要,那么首先尝试创建并注册简单的BHO。只有当BHO正常工作时才添加IDockingWindow实现。