[英]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.