使用 ShellSharp
当你需要多级菜单时,SharpShell 可以通过多个参数进行救援。 https://github.com/dwmkerr/sharpshell 有很多例子,即使对于单级到多级自定义上下文菜单也是如此。
关键是要创建具有属性[ComVisible(true)
]和[COMServerAssociation(AssociationType.AllFiles)
]的类,并继承实现 CanShowMenu 和 CreateMenu 函数的 fromSharpContextMenu 类,你需要通过 Sharpshell 创建者推荐的 regasm 工具或 ServerRegistrationManager 注册程序集。
[ComVisible(true)]
[COMServerAssociation(AssociationType.AllFiles)]
public class AdvancedContextMenu : SharpContextMenu
{
protected override bool CanShowMenu()
{
// We can show the item only for a single selection.
}
protected override ContextMenuStrip CreateMenu()
{
// Create the menu strip.
var menu = new ContextMenuStrip();
... add any level of ToolStripMenuItems and add them to menu
return menu
}
}
更多细节可以在 https://github.com/dwmkerr 和 http://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus 获得。