在Windows中使用C#为特定文件types集成Shell

所以我search了一个如何使用C#将应用程序集成到应用程序(将其添加到右键单击菜单)的指南,但是我找不到如何为特定的文件types执行此操作。 我知道这是可能的,因为WinRar这样做。 那我该怎么做呢?

Solutions Collecting From Web of "在Windows中使用C#为特定文件types集成Shell"

通常有两种方法可以实现这一点。

  1. 注册表键 – 您可以在HKEY_CLASSES_ROOT下编写键和值。 如果你看看这个配置单元,你会看到你的电脑上的扩展。 看看这篇文章的关键和值的细节。 有一些简单的选项可以在这里打开.myfile类型。 这是一个文件关联的例子

  2. Shell扩展(用COM写):在这里你可以做更复杂的东西像Handlers。 它们会被Windows调用,所以你可以做菜单上的绘画,或者右键单击文件时添加自定义操作。 这里比文件还要多,你甚至可以添加属性表和自定义工具提示。

你会发现一些关于不使用.NET来编写Shell Handler的讨论。 这只适用于版本的.NET。 它的一切都可以与.NET4。

本文将帮助您使用.NET4中的上下文菜单处理程序

**为什么不建议:

当你编写一个shell处理程序时,它会被主机进程(通常是Windows资源管理器)调用,但也可以是FileOpenDialogs和FolderBrowser对话框。 所以,如果你在.NET 2.0中编写了一个shell扩展,并且调用了一个名为File Open对话框的.NET 1.1应用程序,然后调用了你的.NET 2.0 shell处理程序,并且你的.NET 1.1应用程序有一个较老的CLR会有版本冲突。

所以我很高兴最终发现,这已经在.NET 4 =中得到了修正)

Windows资源管理器右键单击菜单由注册表控制。 特别是,HKEY_CLASSES_ROOT配置单元。

一个很好的方法可以得到一个好主意,那就是检查HKCR\.txt是如何在右键菜单中显示文本文件的。 看看指向“txtfile”的(默认)键。 HKCR\txtfile将有一个子密钥HKCR\txtfile\shell\open\comman d。 (默认)键显示打开notepad.exe的命令,其参数为“%1”,表示正在打开的文件。 用其他名称替换打开的键(请参阅txtfile键中的打印和打印键)以将其他自定义命令添加到右键单击菜单。

一旦你掌握了你需要添加什么来集成你的应用程序,你可以检查出Microsoft.Win32命名空间的类,以帮助操纵注册表通过C#代码。