使用 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/dwmkerrhttp://www.codeproject.com/Articles/512956/NET-Shell-Extensions-Shell-Context-Menus 获得