【发布时间】:2014-07-27 09:28:44
【问题描述】:
我正在尝试使用 C++ 中的自定义面板扩展 whindows 资源管理器(不是 IE),它应该如下所示:
这是我发现的一个类似问题(在 C# 中): Similar question
这个问题是关于 C# 的,并且已经得到了答案。
但我自己发现答案对我来说有点太简短了,这就是我得到的:
- 我应该实现一个 BHO 对象
- BHO 对象应实现 IObjectWithSite 和 IDockingWindow
- 在SetSite方法中,调用QueryInterface获取服务提供者的指针,然后调用QueryService获取Docking窗口框架的指针,最后调用 AddToolBar 添加我的自定义窗口。 这就是我迷路的地方
我的问题是:
- 我应该在什么时候创建我的自定义窗口?在对象初始化期间?
- 我认为我应该先获得一个父窗口的句柄(在我的情况下,我认为它应该是 Windows 资源管理器的句柄),然后才能创建自己的子窗口,我在哪里可以得到这个句柄?用停靠窗框的指针?
- 我应该如何注册我的 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