2009-12-03 70 views
33

我想写一个小工具,即执行以下操作:集成到Windows资源管理器右键菜单

当你右键点击一个特定的文件扩展名的文件在Windows资源管理器上下文菜单中显示的附加条目。

当您单击此条目时,某个EXE将以此文件作为其参数之一启动。

我想为此使用C#/ .NET 2.0。如果这是不可能的,我也可以用C++/Win32来完成。

我的问题是:

  1. 是否有可能与C#.NET 2.0?
  2. 集成到Windows资源管理器上下文菜单中的必要功能是什么?
  3. 我该如何使这永久? (我不想在每次启动后重新启动此工具)
  4. 我需要特别照顾什么? (不同的操作系统,安全权限等)

回答

4

所有你需要做的就是添加一些东西到注册表中。所以是的,你可以用.NET 2.0来做到这一点。这是一个example of how to add Edit with Notepad

如果我没有记错,%1是选定的文件。

+2

这不会在Vista和Win7下工作。只有在XP和2000下。我不知道为什么。 –

+1

我认为注册表路径是不同的,但它应该仍然工作:http://www.vistax64.com/tutorials/89829-start-menu-customize-context-menu.html –

22

您需要访问注册表并在root\\File\\shellroot\Folder\\shell下添加一个密钥,具体取决于您希望菜单项可见的项目。

尝试this article at CodeProject,这是非常有用的。

编辑:有another article here这可能是有帮助的。

+0

http://www.codeproject.com /KB/cs/dateparser.aspx – Kiquenet

+0

+1,用于链接到伟大的“简单外壳上下文菜单”项目。 –

+0

仍然有用,谢谢Mark –

3

顺便说一句,由于目前无法在同一进程中托管多个运行时版本(.NET 4将解除此限制),因此不支持将.NET用于shell扩展。

考虑一下你有两个shell扩展的情况;一个用于.NET 3.5,一个用于.NET 1.哪个运行时将加载到您的进程中?那么,它或多或少是随机的 - 它取决于哪个外壳扩展首先被加载。有时它可能是2.0运行时,有时可能是1.1运行时。

这也是一个问题,如果一个.NET程序创建通用文件对话框;你的shell扩展可能会或可能不会加载,并且可能会或可能不会运行正确的运行时版本。

因此,如果你下了Shell extension route你应该使用本地C++/COM/Win32。

+0

最新的.Net 4.0运行时支持使用早期的.Net运行时并行加载.Net 4.0运行时(以及所有未来的运行时)。 请参阅从http://msdn.microsoft.com/en-us/magazine/ee819091.aspx 以下摘录“,具有在多进程运行时与其他运行时的能力,我们现在可以提供编写托管普遍支持外壳扩展 - 甚至是那些在机器上运行的任意应用程序。“ – logicnp

相关问题