Windows 资源管理器加载项
Posted
技术标签:
【中文标题】Windows 资源管理器加载项【英文标题】:Windows Explorer add-ons 【发布时间】:2010-12-06 04:45:48 【问题描述】:SVN 和 Git 等工具如何将自身附加到 Windows 资源管理器,以便在右键菜单中添加选项以及根据文件是否已编辑添加对勾/感叹号?
(我不关注 Git 或 SVN 特定的信息 - 我只是将它们用作示例)
【问题讨论】:
【参考方案1】:你想要的叫做 Shell Extensions,是进程内的 COM 对象,它扩展了 Windows 操作系统的能力。
(来源:csscript.net)
你可以看到这些链接
The Complete Idiot's Guide to Writing Shell Extensions - Index Registering Shell Extensions再见。
【讨论】:
【参考方案2】:Explorer 允许 DLL 注册为 shell 扩展。 shell 扩展可以提供上下文菜单项、图标覆盖和许多其他功能。它通过暴露 Explorer 调用的某些 COM 接口来做到这一点,例如在显示菜单或图标之前。这里是MSDN home page for shell extensibility——虽然奇怪的是上下文菜单和图标覆盖的东西似乎不再存在——你可能不得不尝试 Win32 和 COM 开发下的离线 SDK |用户界面 | Windows 用户体验 | Windows 外壳 | Shell 开发人员指南 |将应用程序集成到外壳中。
【讨论】:
【参考方案3】:根据您想要的外壳扩展,它们的实现可能非常复杂。我不知道你在寻找什么,快速编写一个不错的扩展,或者深入了解细节并学习所有的实践。 如果您不关心如何实现,并且只是有一些想要实现的想法,请查看这个库以编写 shell 扩展......
EZShellExtensions MFCEZShellExtensions.NET
有很多不同的类型: - 上下文菜单 - 属性页 - 图标处理程序 还有更多...
他们还有另一个用于编写命名空间扩展的库(显示在 Windows 资源管理器的树窗格中的内容)。
【讨论】:
您正在链接到该框架的 .NET 版本。永远不要使用它!永远不要在 .NET 中编写 shell 扩展。原因如下:blogs.msdn.com/oldnewthing/archive/2006/12/18/1317290.aspx 有趣的地方。没想到。我想这可能是也可能不是问题,具体取决于您的目标受众。如果您正在为控制良好的受众写作(例如,Intranet 网站如何定位 JUST IE,而忽略其他浏览器),这可能不是问题,但对于公开发布,这是一个值得考虑的好点。更新了我的答案以包含 MFC 版本。 这不是 IE 与其他浏览器的问题。问题是每个使用插件的应用程序都可能崩溃。想象一个使用 COM 插件的本机应用程序,其中一个 COM 插件是用 .NET 编写的。如果应用在需要加载插件之前使用了文件打开/保存对话框,则该插件可能无法加载,因为另一个 .NET 运行时已由于该错误的 shell 扩展名而被加载。实际上,甚至不需要使用文件打开/保存对话框:即使是一些常用的“普通”shell 函数,如 SHGetFileInfo() 也可以。是的:如果安装了这样的 shell 扩展,我有一个应用程序会中断 是的,不是的;我明白你在说什么...... IE 的事情只是一个例子,你有时不必担心这种情况,这取决于你的应用程序。例如,在许多银行环境中,工作站是高度、高度控制的,没有经过深入和彻底测试的系统不会发生任何事情。如果您处于其中一种环境中,那么事情在某些方面会容易一些。不过,对于普通大众来说,是的——这些问题绝对值得考虑。 @Stefan 随着 2010 年 4 月 12 日在 .NET 4.0 中引入不同 CLR 版本的进程内并行执行,这个问题终于得到了解决。另见相关 SOF 文章:***.com/questions/3053876/…。以上是关于Windows 资源管理器加载项的主要内容,如果未能解决你的问题,请参考以下文章
VS解决方案文件的Windows资源管理器上下文菜单中的“构建”项?