// Returns: number of menu items inserted. // Ignore Send To menus, shortcuts, defaultonly int IContextMenu.QueryContextMenu(HMenu hMenu, int iMenu, int idCmdFirst, int idCmdLast, CMF uFlags) { int id = 0; if ((uFlags & (CMF.CMF_VERBSONLY | CMF.CMF_DEFAULTONLY | CMF.CMF_NOVERBS)) == 0 || (uFlags & CMF.CMF_EXPLORE) != 0) //if (IsFSItem(uFlags)) { if (Helpers.DragQueryFile(m_hDrop, 0xffffffff, null, 0) > 1) Helpers.InsertMenu(hMenu, iMenu, MFMENU.MF_STRING | MFMENU.MF_ENABLED, new IntPtr(idCmdFirst + 1), "&Rename ..."); // 1 for rename mFolders = Directory.GetDirectories(DropboxDir); // look into implementing caching folder list and hooking to file system watcher // Create the submenu popup, add folder items to it and then finally insert it into the explorer contextmenu. HMenu submenu = Helpers.CreatePopupMenu(); Helpers.AppendMenu(submenu, MFMENU.MF_STRING | MFMENU.MF_ENABLED, new IntPtr(idCmdFirst + 2), "Route"); // 2 for root dropbox folder. id = 2; for (int i = 0; i < mFolders.Length; i++) { Helpers.AppendMenu(submenu, MFMENU.MF_STRING | MFMENU.MF_ENABLED, new IntPtr(idCmdFirst + ++id), mFolders[i].Substring(mFolders[i].LastIndexOf('\\') + 1)); } Helpers.InsertMenu(hMenu, 5, MFMENU.MF_BYPOSITION | MFMENU.MF_POPUP | MFMENU.MF_ENABLED, submenu.handle, "Send to &Dropbox"); } return id; }
internal static extern bool InsertMenu(HMenu hmenu, int position, MFMENU uflags, IntPtr uIDNewItemOrSubmenu, string text);
internal static extern bool InsertMenuItem(HMenu hmenu, uint uposition, uint uflags, ref MENUITEMINFO mii);
internal static extern bool AppendMenu(HMenu hmenu, MFMENU uflags, IntPtr uIDNewItemOrSubmenu, string text);