使用BHO扩展Windows资源管理器

Sea*_*ean 5 c++ windows shell windows-explorer shell-extensions

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

在此输入图像描述

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

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

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

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

我的问题是:

  1. 我应该在什么时候创建自定义窗口?在初始化对象期间?
  2. 我想我应该得到一个父窗口的句柄(在我的情况下,我认为它应该是Windows资源管理器的句柄),然后才能创建我自己的窗口,这将是它的一个孩子,我在哪里可以得到这个句柄?与对接窗框的指针?
  3. 我该如何注册我的dll?我读了一些预览处理程序的示例代码,我们必须在系统调用之前正确注册dll吗?

我试图重现类似的问题几天所说的,但现在没有运气.

我是BHO的新手和所有这些东西,请帮助我解决这个问题,谢谢.

Den*_*mov 1

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

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

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

Site.QueryInterface(IDockingWindowSite, FDockingWindowSite);
FDockingWindowSite.GetWindow(FParent);
Run Code Online (Sandbox Code Playgroud)

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

我花了很长时间来创建和调试这样的扩展。如果您不是这个领域的专家,请再考虑一下 - 您真的需要这个功能吗?但如果您确实决定需要,那么首先尝试创建并注册简单的 BHO。并且只有当 BHO 正常工作时才添加 IDockingWindow 实现。