簡體   English   中英

將子菜單添加到資源管理器上下文菜單

[英]Adding submenu's to explorer context menu

我有一些基於的代碼,這使我可以向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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM