我搜索了一份关于如何在C#中进行应用程序shell集成(将其添加到右键菜单)的指南,但我没有找到只针对特定文件类型执行此操作的方法。我知道这是可能的,因为WinRar就可以实现。那么我该怎么做呢?
我搜索了一份关于如何在C#中进行应用程序shell集成(将其添加到右键菜单)的指南,但我没有找到只针对特定文件类型执行此操作的方法。我知道这是可能的,因为WinRar就可以实现。那么我该怎么做呢?
通常可以有两种方式来实现这个。
注册表键 - 您可以在 HKEY_CLASSES_ROOT 下编写键和值。如果您查看该项,您将看到计算机上的扩展名。查看此文章以获取有关键和值的详细信息。在这里可以实现一些简单的选项,例如使用您的应用程序打开 .myfile
类型。这是一个文件关联示例
Shell 扩展(使用 COM 编写):在这里,您可以执行更复杂的操作,如处理程序。它们将由 Windows 调用,因此您可以做一些诸如在菜单上绘制或添加自定义操作等操作,当右键单击文件时。这里比文件还要多,您甚至可以添加属性表和自定义工具提示。
您会发现一些关于不使用.NET编写Shell处理程序的讨论。这仅适用于早期版本的.NET。.NET4没有问题。
本文应该能够帮助您在.NET4中创建上下文菜单处理程序。
** 为什么不建议使用:
当您编写Shell处理程序时,它会被主机进程(通常是Windows资源管理器)调用,但也会被FileOpenDialogs和FolderBrowser对话框等其他东西调用。因此,如果您在.NET 2.0中编写了一个Shell扩展,然后.NET 1.1应用程序调用了文件打开对话框,那么您的.NET 2.0 Shell处理程序将被调用,并且存在旧版CLR的.NET 1.1应用程序中将出现版本冲突。
我很高兴地发现这个问题在.NET 4中得到了解决 =)
Windows资源管理器右键菜单由注册表控制,具体来说是HKEY_CLASSES_ROOT。
了解其中所有内容的好方法是查看HKCR\.txt
,它显示右键菜单中文本文件将发生什么。查看(默认)键,它指向“txtfile”。然后,HKCR\txtfile
将有一个子键HKCR\txtfile\shell\open\comman
d。该键的(默认)键显示打开notepad.exe的命令,参数为“%1”,表示正在打开的文件。将打开键替换为其他名称(请参见txtfile键中的print和printto键),以添加不同的自定义命令到右键菜单。
一旦您掌握了需要添加以集成应用程序的内容,就可以查看Microsoft.Win32 namespace,以获取帮助通过c#代码操作注册表的类。