【问题标题】:How can i add a button to all windows explorer instances?如何向所有 Windows 资源管理器实例添加按钮?
【发布时间】:2009-11-16 21:29:18
【问题描述】:

我正在尝试向任何 Windows 资源管理器实例中的现有工具栏之一添加一个按钮。

经过大量研究,我发现 BHO(浏览器辅助对象)是挂钩的最佳方法

到 Windows 资源管理器。

我的问题是:

  1. 这是正确的做法吗?
  2. 在 BHO 的 SetSite 中,我得到了 comObject,它是资源管理器窗口。现在呢?
  3. 如果我可以获取资源管理器窗口的 hWnd,我可以使用 win API 添加我的按钮吗?

请注意,我正在为 XP 使用 C# 开发。

谢谢。

【问题讨论】:

    标签: c# com interop windows-xp windows-explorer


    【解决方案1】:

    1 在 XP 之前的版本中,您可以在默认文件夹模板中添加自定义项目,因为文件夹窗口实际上是一个网页。在 XP 及更高版本中,这不再适用。 Deskband 是扩展 UI 的受支持方式。 2 网站是一样的。您甚至可以接收 DWebBrowserEvents2 以在文件夹视图准备就绪时收到通知。 3 不支持在资源管理器上使用窗口函数。自定义资源管理器的受支持方式是创建桌带。如果您有资源针对客户受众使用的每个版本的 Windows Explorer 测试您的代码,并在 explorer.exe 的每个新版本(或新语言)发布时继续进行兼容性测试,那么理论上是可能的。

    BHO 无法添加桌带。如果您想开始 BHO 和桌带编程,请查看 Paul DiLascia 在 MSJ 1999 年 11 月号中的文章“My Band is Your Band”。 BHO 的 MSDN 中还有另一篇文章“使用 Visual Studio 2005 构建浏览器帮助程序对象”。基本上,您需要处理 DocumentComplete 和 BeforeNavigate 事件,并注意在文档未准备好时不要访问文件夹视图。您可以使用您认为适合 BHO 和桌带之间的任何通信方法,例如具有特殊窗口类的隐藏窗口、如果两者在同一个 dll 中的静态变量、共享内存、命名管道等。

    Microsoft does not support creating In-Process extensions in managed code until .Net 4.0

    【讨论】:

    • 感谢盛的回答,我同意 windows 功能是一个不好的方法。只是为了说清楚,你的意思是我应该有一个 BHO 来为 Windows 资源管理器添加一个波段控制?对我来说听起来不错,但如何?再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    相关资源
    最近更新 更多