我有一个C#WPF应用程序。它旨在处理任何和所有文件。现在,它通过命令行参数接受“输入”以及拖放到主窗口中的控件。但是,理想情况下,我希望人们右键单击任何文件/多个文件,让他们只需点击“Awesomify this”即可。 (那不是真名。:P)
我从几年前就有了一些上下文菜单的经验,所以总而言之,它并不是最新的。因此,我正在寻找有关实现此功能的最佳方法的建议。以下所有示例都基于我使用W7看到的内容。
一般来说,我理解基本上有两种方式:纯注册表和注册表+ COM对象。
前者有一定的优雅,因为我不想要任何特别的东西;但是,从文档中我可以看出,这些菜单项总是与主文件操作在同一个地方聚集(打开,预览,打印)。但是,我希望我的项目在图腾柱上看起来更低。如果我查看我的个人上下文菜单中的随机文件,我希望它可以在'spot' UltraEdit 和 Malwarebytes Anti-Malware 自己。坚持我在HKCR\*\shell\AwesomeTest
下的条目可以获得我的项目,但无论我选择Position
,我都会得到两个不同的极端:Top
将其置于默认项目之上,Bottom
将其放在属性上方。我希望它介于与共享和还原以前的版本之间,大多数通用工具似乎找到了家。
更多的注册表挖掘似乎指出了我想模仿使用COM对象路由的应用程序。这会让我(我相信)回到原生代码。然后,这将带来我试图避免的所有32位和64位开发的地狱。
我有什么遗漏的吗?同样地,除了MSDN page regarding context menu handlers之外我已经看过并发现相当无益(因为它似乎在没有深入了解有关放置等的更精确的细节的情况下略微浏览),是否有关于此问题的任何好消息来源?
我还没有想到的另一件事是我如何才能正确地将IDropTarget支持添加到我的.NET WPF应用程序中,所以也欢迎这方面的信息。
如果有人有即时答案,那就太好了,但我主要是试图找到正确的路径,而不会在死路上浪费几天。这似乎有很多。 :(
答案 0 :(得分:1)
IContextMenu :: QueryContextMenu()。 Shell扩展属于C ++领域,在C#中非常不愉快,需要.NET 4.0。使用它的示例项目is here。