private void ReleaseAll() { if (null != this._oContextMenu) { Marshal.ReleaseComObject(this._oContextMenu); this._oContextMenu = null; } if (null != this._oContextMenu2) { Marshal.ReleaseComObject(this._oContextMenu2); this._oContextMenu2 = null; } if (null != this._oContextMenu3) { Marshal.ReleaseComObject(this._oContextMenu3); this._oContextMenu3 = null; } if (null != this._oDesktopFolder) { Marshal.ReleaseComObject(this._oDesktopFolder); this._oDesktopFolder = null; } if (null != this._oParentFolder) { Marshal.ReleaseComObject(this._oParentFolder); this._oParentFolder = null; } if (null != this._arrPIDLs) { this.FreePIDLs(this._arrPIDLs); this._arrPIDLs = null; } }
private void InvokeCommand(ShellContextMenu.IContextMenu oContextMenu, uint nCmd, string strFolder, Point pointInvoke) { ShellContextMenu.CMINVOKECOMMANDINFOEX cMINVOKECOMMANDINFOEX = default(ShellContextMenu.CMINVOKECOMMANDINFOEX); cMINVOKECOMMANDINFOEX.cbSize = ShellContextMenu.cbInvokeCommand; cMINVOKECOMMANDINFOEX.lpVerb = (IntPtr)((long)((ulong)(nCmd - 1u))); cMINVOKECOMMANDINFOEX.lpDirectory = strFolder; cMINVOKECOMMANDINFOEX.lpVerbW = (IntPtr)((long)((ulong)(nCmd - 1u))); cMINVOKECOMMANDINFOEX.lpDirectoryW = strFolder; cMINVOKECOMMANDINFOEX.fMask = (ShellContextMenu.CMIC.UNICODE | ShellContextMenu.CMIC.PTINVOKE | (((Control.ModifierKeys & Keys.Control) != Keys.None) ? ShellContextMenu.CMIC.CONTROL_DOWN : ((ShellContextMenu.CMIC) 0u)) | (((Control.ModifierKeys & Keys.Shift) != Keys.None) ? ShellContextMenu.CMIC.SHIFT_DOWN : ((ShellContextMenu.CMIC) 0u))); cMINVOKECOMMANDINFOEX.ptInvoke = new ShellContextMenu.POINT(pointInvoke.X, pointInvoke.Y); cMINVOKECOMMANDINFOEX.nShow = ShellContextMenu.SW.SHOWNORMAL; oContextMenu.InvokeCommand(ref cMINVOKECOMMANDINFOEX); }
private bool GetContextMenuInterfaces(ShellContextMenu.IShellFolder oParentFolder, IntPtr[] arrPIDLs, out IntPtr ctxMenuPtr) { int uIObjectOf = oParentFolder.GetUIObjectOf(IntPtr.Zero, (uint)arrPIDLs.Length, arrPIDLs, ref ShellContextMenu.IID_IContextMenu, IntPtr.Zero, out ctxMenuPtr); bool result; if (0 == uIObjectOf) { this._oContextMenu = (ShellContextMenu.IContextMenu)Marshal.GetTypedObjectForIUnknown(ctxMenuPtr, typeof(ShellContextMenu.IContextMenu)); result = true; } else { ctxMenuPtr = IntPtr.Zero; this._oContextMenu = null; result = false; } return(result); }