因此,我搜索了如何使用C#将应用程序集成到应用程序(将其添加到右键单击菜单)的指南,但我找不到如何做到这一点对于特定的文件类型。我知道这是可能的,因为WinRar可以做到这一点。那我该怎么做?Shell在Windows中与C#进行特定文件类型的集成
回答
通常有两种方式可以实现这一点。
注册表键 - 您可以在HKEY_CLASSES_ROOT下编写键和值。如果你看一下这个配置单元,你会在你的电脑上看到扩展名。有关密钥和值的详细信息,请看article。有一些简单的选项,可以在这里用你的应用程序打开
.myfile
类型。这里是一个File Association Example外壳扩展(在COM书面):在这里,你可以做更复杂的东西一样Handlers.,他们将获得由Windows调用,所以你可以做这样的事情在菜单上的油漆,或添加自定义操作时,文件右键点击。这里比文件还多,你甚至可以添加属性表和自定义工具提示。
有关不使用.NET编写Shell处理程序**的一些talk。这仅适用于较旧的版本的.NET。 Its all ok with .NET4.
这篇文章应该可以帮助您与Context Menu Handler in .NET4
**为什么为它不建议:
当你写一个shell处理程序,它就会由主机进程调用(一般为Windows资源管理器) ,但也包括FileOpenDialogs和FolderBrowser对话框。因此,如果你在.NET 2.0中编写了一个外壳扩展,以及一个称为文件打开对话框的.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 namespace的类以帮助通过c#代码操作注册表。
- 1. 与Windows Shell集成
- 2. 将C#集成到Windows Shell中
- 3. 如何通过vim中的shell命令在某个特定类型的文件中运行该文件
- 4. 按特定类型排序收集c#
- 5. 将特定值与文本文件中的值进行比较
- 6. 定位在特定的文件夹中的特定文件c#
- 7. 在Windows 7的shell新的上下文菜单中添加非文件类型
- 8. Windows 8特定文件类型上下文菜单关联
- 9. C#更改文件中的特定行
- 10. 在两个头文件中进行类型定义交换
- 11. C#与泛型集合类
- 12. 如何使用bash shell检查if语句中的特定文件类型
- 13. 从特定目录中列出特定类型的文件
- 14. 将特定文件映射到Cherokee中的特定MIME类型
- 15. c#与通用类型的接口类型进行转换
- 16. 在Windows批处理中打印文本文件的特定行
- 17. 在C++中进行类型转换
- 18. C#中特定类型特定方法的通用类
- 19. 使用.NET的Windows Shell集成
- 20. 当在C++中进行文件分析时跳到特定的行值
- 21. 的lighttpd mod_redirect HTTPS特异性HTTP进行媒体文件类型
- 22. MAC上的grep特定文件类型
- 23. .htaccess特定的文件类型
- 24. Vim配置特定的文件类型
- 25. MFC,找到特定的文件类型
- 26. 如何在intellij插件中注册特定类型的文件
- 27. 名称特定的文件夹中的PhpStorm文件类型
- 28. 在C++类中包装C类库,并进行类型转换
- 29. 查找C#中特定类型的成员字段
- 30. 基于Web的IDE与shell /文件管理集成* nix
在如此多的进程中加载.net资源仍然存在资源浪费。 – CodesInChaos 2011-03-27 19:01:43
你的意思是当.NET处理程序被注入主机进程?嗯,我猜。但** ** ** .NET的一个+1将是它比C++更容易编写和维护的代码。 (至少对我来说):)我记得Michael Dunn或Shell Handlers在C++中的这一系列文章,我在几年前尝试阅读它们,但它很难掌握。 – gideon 2011-03-27 19:04:08
问题是,有几十个主机进程就像记事本一样非常便宜,现在已经承担了整个CLR的负担。增加了很多。 – CodesInChaos 2011-03-27 19:08:43