C# 添加子菜单';s到资源管理器上下文菜单

C# 添加子菜单';s到资源管理器上下文菜单,c#,contextmenu,submenu,explorer,C#,Contextmenu,Submenu,Explorer,我有一些基于的代码,它允许我向windows资源管理器上下文菜单中添加的额外功能。我已经能够成功地使这项工作 但是,我现在想将多个项目添加到上下文菜单中,并将其添加到子菜单中。然而,我似乎无法解决,首先,如何添加子菜单到它,然后如何链接额外的项目将在该菜单内 // Use either InsertMenu or InsertMenuItem to add menu items. MENUITEMINFO mii = new MENUITEMINFO();

我有一些基于的代码,它允许我向windows资源管理器上下文菜单中添加的额外功能。我已经能够成功地使这项工作

但是,我现在想将多个项目添加到上下文菜单中,并将其添加到子菜单中。然而,我似乎无法解决,首先,如何添加子菜单到它,然后如何链接额外的项目将在该菜单内

        // Use either InsertMenu or InsertMenuItem to add menu items.
        MENUITEMINFO mii = new MENUITEMINFO();
        mii.cbSize = (uint)Marshal.SizeOf(mii);
        mii.fMask = MIIM.MIIM_BITMAP | MIIM.MIIM_STRING | MIIM.MIIM_FTYPE | 
            MIIM.MIIM_ID | MIIM.MIIM_STATE;
        mii.wID = idCmdFirst + IDM_DISPLAY;
        mii.fType = MFT.MFT_STRING;
        mii.dwTypeData = this.menuText;
        mii.fState = MFS.MFS_ENABLED;
        mii.hbmpItem = this.menuBmp;
        if (!NativeMethods.InsertMenuItem(hMenu, iMenu, true, ref mii))
        {
            return Marshal.GetHRForLastWin32Error();
        }
这是我当前必须添加的项的代码。不确定我需要如何修改子菜单,以及如何链接多个项目的单击操作


有一个shellExtLib,它定义了大部分内容,看起来它只是从user32.dll导入内容。还定义了一个InvokeCommand(),这是我实际的“采取行动”代码所在的位置

这就是我最终得到的解决方案:

    private MENUITEMINFO CreateSubMenu(string menuText, IntPtr menuIcon, IntPtr hSubMenu, bool isEnabled = true)
    {
        MENUITEMINFO subMenu = new MENUITEMINFO();
        subMenu.cbSize = (uint)Marshal.SizeOf(subMenu);
        subMenu.fMask = MIIM.MIIM_BITMAP | MIIM.MIIM_SUBMENU | MIIM.MIIM_STRING | MIIM.MIIM_FTYPE | MIIM.MIIM_STATE;
        subMenu.hSubMenu = hSubMenu;
        //subMenu.wID = itemID;
        subMenu.fType = MFT.MFT_STRING;
        subMenu.dwTypeData = menuText;
        subMenu.fState = isEnabled ? MFS.MFS_ENABLED : MFS.MFS_DISABLED;
        subMenu.hbmpItem = menuIcon;
        //itemID++;
        return subMenu;
    }
结合:

    IntPtr hSubMenu = NativeMethods.CreatePopupMenu();

    [DllImport("user32.dll")]
    public static extern IntPtr CreatePopupMenu();