【问题标题】:Extend Windows explorer with BHO使用 BHO 扩展 Windows 资源管理器
【发布时间】:2014-07-27 09:28:44
【问题描述】:

我正在尝试使用 C++ 中的自定义面板扩展 whindows 资源管理器(不是 IE),它应该如下所示:

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

这个问题是关于 C# 的,并且已经得到了答案。

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

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

我的问题是:

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

几天来我一直试图重现类似问题所说的内容,但现在没有运气。

我对 BHO 和所有这些东西真的很陌生,请帮我解决这个问题,谢谢。

【问题讨论】:

  • BHO 是邪恶的。 BHO 中的任何错误都会成为系统错误。因此,对于不确定 COM 技术细节的人,我建议不要这样做(就此而言,我一般建议这样做)。
  • 是的,你明白了,完全同意。但是不知何故,我们的系统需要这样的功能,而且它似乎是必不可少的,除了 BHO 之外,你是否知道任何其他方式来实现我的目的? @Cheersandhth.-阿尔夫
  • 如果您希望能够对选定的驱动器执行某些操作,请为驱动器的右键单击菜单注册一个处理程序。这非常很容易做到。您的处理程序将驱动器作为命令行参数获取,用户可以在驱动器的右键菜单中看到它。
  • 例如,将[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shell\say_ah]的默认值设置为“说“啊!”。然后将[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Drive\shell\say_ah\command]的默认值设置为“cmd /k echo Ah! - %1”。效果很好。
  • Alf 说的很到位 - 向您的管理层反馈,让他们知道即使是微软也不鼓励这样做。但是如果你必须的话,去订购任何你能找到的 Dino 书的二手副本:amazon.com/Visual-C-Windows-Shell-Programming/dp/1861001843/…我认为这是唯一一本关于这个主题的书。

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


【解决方案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 实现。

【讨论】:

  • 哇,酷,伙计!伟大而快速的解释!会试试这个!再次感谢,伙计。
  • 经过大量搜索后,我终于按照您的指示让它工作了。它有效。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 2012-02-20
  • 1970-01-01
  • 2011-11-20
  • 2015-03-02
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多