集成到 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\\shell
或root\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”上下文菜单选项?