集成到 Windows 资源管理器上下文菜单中

Posted

技术标签:

【中文标题】集成到 Windows 资源管理器上下文菜单中【英文标题】:Integrating into Windows Explorer context menu 【发布时间】:2010-12-22 18:29:33 【问题描述】:

我想写一个小工具,它执行以下操作:

当您右键单击具有特定文件扩展名的文件时,Windows 资源管理器上下文菜单会显示一个附加条目。

当您单击此条目时,将启动某个 EXE,并将此文件作为其参数之一。

我想为此使用 C#/.NET 2.0。如果不可能,我也可以用 C++/Win32 来做。

我的问题是:

    是否可以使用 C# .NET 2.0? 的必要功能是什么? 我怎样才能使它永久化? (我不想在每次启动后重新启动此工具) 我需要特别注意什么? (不同的操作系统、安全权限等)

【问题讨论】:

【参考方案1】:

您需要访问注册表并在root\\File\\shellroot\Folder\\shell 下添加一个键,具体取决于您希望菜单项在哪些项目上可见。

试试this article at CodeProject,挺好用的。

编辑:another article here 可能会有所帮助。

【讨论】:

+1 链接到伟大的“简单外壳上下文菜单”项目。【参考方案2】:

顺便说一句,由于当前无法在同一进程中托管多个运行时版本(.NET 4 将解除此限制),因此不支持将 .NET 用于 shell 扩展。

考虑您有两个外壳扩展的情况;一个用于 .NET 3.5,一个用于 .NET 1。哪个运行时将加载到您的进程中?好吧,它或多或少是随机的——这取决于首先加载哪个 shell 扩展。有时可能是 2.0 运行时,有时可能是 1.1 运行时。

如果 .NET 程序创建公用文件对话框,这也是一个问题;您的 shell 扩展可能会或可能不会加载,并且可能会或可能不会以正确的运行时版本运行。

因此,如果您使用Shell extension route,您应该使用本机 C++/COM/Win32。

【讨论】:

最新的 .Net 4.0 运行时支持在进程中并行加载 .Net 4.0 运行时(以及所有未来的运行时)与早期的 .Net 运行时。请参阅以下来自msdn.microsoft.com/en-us/magazine/ee819091.aspx 的摘录“由于能够让多个运行时与任何其他运行时一起运行,我们现在可以为编写托管 shell 扩展提供一般支持——即使是那些在机器上与任意应用程序一起在进程内运行的扩展。” SharpShell 项目使 shell 扩展更容易使用更新的运行时。

以上是关于集成到 Windows 资源管理器上下文菜单中的主要内容,如果未能解决你的问题,请参考以下文章

如何将上下文菜单添加到 Java 应用程序的 Windows 资源管理器?

如何使用 C 或 C++ 将选项添加到 Windows 资源管理器上下文菜单?

如何在 Windows 11 的 Windows 资源管理器中添加“Git Bash Here”上下文菜单选项?

Windows 资源管理器 - 删除上下文菜单中的条目

如何在 Windows 资源管理器中添加“在此处打开 git-bash ...”上下文菜单?

如何从“右键单击”上下文菜单(Windows 资源管理器)中选择多个文件以启动同一个应用程序