Shell使用C#在Windows中集成特定文件类型

时间:2011-03-27 16:03:56

标签: c# windows registry file-type shell-extensions

所以我搜索了如何使用C#将应用程序(将其添加到右键菜单)进行shell集成的指南,但我找不到如何仅针对特定文件类型执行此操作。我知道这是可能的,因为WinRar会这样做。那我怎么能这样做呢?

2 个答案:

答案 0 :(得分:7)

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

  1. 注册表项 - 您可以在HKEY_CLASSES_ROOT下编写键和值。如果你看看那个蜂巢,你会看到你电脑上的扩展。有关键和值的详细信息,请查看此article。可以在此处使用您的应用程序打开.myfile类型的选项。这是File Association Example

  2. Shell扩展(用COM编写):在这里你可以做更复杂的事情,比如Handlers.它们会被Windows调用,这样你就可以做菜单上的绘画,或者在文件时添加自定义动作右键单击。这里有比文件更多的内容,您甚至可以添加属性表和自定义工具提示。

  3. 你会发现一些talk关于不使用.NET来编写Shell Handler **。这仅适用于较旧的版本的.NET。 Its all ok with .NET4.

    本文应该为您提供Context Menu Handler in .NET4

    **为什么 不推荐:

    当你编写shell处理程序时,它会被主机进程(通常是Windows资源管理器)调用,但也会被FileOpenDialogs和FolderBrowser对话框调用。因此,如果您在.NET 2.0中编写了一个shell扩展,并且.NET 1.1应用程序称为文件打开对话框,然后您的.NET 2.0 shell处理程序将被调用,并且您的.NET 1.1应用程序具有较旧的CLR,则会出现问题并且会有版本冲突。

    所以我很高兴终于发现这已经在.NET 4中以某种方式得到了修复=)

答案 1 :(得分:1)

Windows资源管理器右键单击菜单由注册表控制。具体来说,HKEY_CLASSES_ROOT配置单元。

了解一切是如何工作的好方法是查看HKCR\.txt,其中显示右键菜单中文本文件会发生什么。查看(默认)键,它指向“txtfile”。然后,HKCR\txtfile会有一个子项HKCR\txtfile\shell\open\comman d。 (默认)键显示打开notepad.exe的命令,参数为“%1”,表示正在打开的文件。将open键替换为其他名称(请参阅txtfile键中的print和printto键),以向右键单击菜单添加不同的自定义命令。

一旦掌握了集成应用程序需要添加的内容,就可以查看Microsoft.Win32 namespace类以帮助通过c#代码操作注册表。