【发布时间】:2011-03-27 16:03:55
【问题描述】:
因此,我搜索了如何将应用程序与 C# 进行外壳集成(将其添加到右键菜单)的指南,但我找不到仅针对特定文件类型的方法。我知道这是可能的,因为 WinRar 做到了。那我该怎么做呢?
【问题讨论】:
标签: c# windows registry file-type shell-extensions
因此,我搜索了如何将应用程序与 C# 进行外壳集成(将其添加到右键菜单)的指南,但我找不到仅针对特定文件类型的方法。我知道这是可能的,因为 WinRar 做到了。那我该怎么做呢?
【问题讨论】:
标签: c# windows registry file-type shell-extensions
通常有两种方法可以实现这一点。
注册表键 - 您可以在 HKEY_CLASSES_ROOT 下写入键和值。如果您查看那个蜂巢,您会在您的电脑上看到扩展。查看此article 了解有关键和值的详细信息。在这里可以使用一些简单的方法,例如使用您的应用程序打开 .myfile 类型的选项。这是File Association Example
Shell 扩展(用 COM 编写):在这里您可以执行更复杂的操作,例如 Handlers. 它们将被 Windows 调用,因此您可以执行诸如在菜单上绘制之类的操作,或者在文件正确时添加自定义操作-点击。这里除了文件之外还有更多内容,您甚至可以添加属性表和自定义工具提示。
你会发现一些talk 关于不使用 .NET 编写 Shell 处理程序**。这仅适用于 旧 版本的 .NET。 Its all ok with .NET4.
这篇文章应该可以帮助你Context Menu Handler in .NET4
** 为什么不推荐:
当您编写 shell 处理程序时,它会被主机进程(通常是 Windows 资源管理器)调用,但也会被 FileOpenDialogs 和 FolderBrowser 对话框调用。因此,如果您在 .NET 2.0 中编写了一个 shell 扩展,并且一个名为 File Open Dialog 的 .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\command。 (默认)键显示打开notepad.exe的命令,参数为“%1”,表示正在打开的文件。将 open 键替换为其他名称(请参阅 txtfile 键中的 print 和 printto 键)以将不同的自定义命令添加到右键菜单。
一旦您掌握了集成应用程序所需添加的内容,您可以查看 Microsoft.Win32 namespace 中的类,以帮助通过 c# 代码操作注册表。
【讨论】: