public bool GetOpenWithContextMenu(ShellObject item, out object iContextMenuPtr, out IContextMenu iContextMenu) { Guid CLSID_OpenWith = new Guid(0x09799AFB, 0xAD67, 0x11d1, 0xAB, 0xCD, 0x00, 0xC0, 0x4F, 0xC3, 0x09, 0x36); Guid iicm = typeof(IContextMenu).GUID; Guid iise = typeof(IShellExtInit).GUID; if (WindowsAPI.CoCreateInstance( ref CLSID_OpenWith, IntPtr.Zero, 0x1, ref iicm, out iContextMenuPtr) == (int)HResult.Ok) { iContextMenu = iContextMenuPtr as IContextMenu; IntPtr iShellExtInitPtr; if (Marshal.QueryInterface( Marshal.GetIUnknownForObject(iContextMenuPtr), ref iise, out iShellExtInitPtr) == (int)HResult.Ok) { IShellExtInit iShellExtInit = Marshal.GetTypedObjectForIUnknown( iShellExtInitPtr, typeof(IShellExtInit)) as IShellExtInit; try { iShellExtInit.Initialize(item.PIDL, IntPtr.Zero, 0); Marshal.ReleaseComObject(iShellExtInit); Marshal.Release(iShellExtInitPtr); return(true); } finally { } } else { if (iContextMenu != null) { Marshal.ReleaseComObject(iContextMenu); iContextMenu = null; } if (iContextMenuPtr != null) { Marshal.ReleaseComObject(iContextMenuPtr); iContextMenuPtr = null; } return(false); } } else { iContextMenuPtr = IntPtr.Zero; iContextMenu = null; return(false); } }
public bool GetNewContextMenu(ShellObject item, out object iContextMenuPtr, out IContextMenu iContextMenu) { Guid CLSID_NewMenu = new Guid("{D969A300-E7FF-11d0-A93B-00A0C90F2719}"); Guid iicm = typeof(IContextMenu).GUID; Guid iise = typeof(IShellExtInit).GUID; if (WindowsAPI.CoCreateInstance( ref CLSID_NewMenu, IntPtr.Zero, 0x1, ref iicm, out iContextMenuPtr) == (int)HResult.Ok) { iContextMenu = iContextMenuPtr as IContextMenu; IntPtr iShellExtInitPtr; if (Marshal.QueryInterface( Marshal.GetIUnknownForObject(iContextMenuPtr), ref iise, out iShellExtInitPtr) == (int)HResult.Ok) { IShellExtInit iShellExtInit = Marshal.GetTypedObjectForIUnknown( iShellExtInitPtr, typeof(IShellExtInit)) as IShellExtInit; try { iShellExtInit.Initialize(item.PIDL, IntPtr.Zero, 0); Marshal.ReleaseComObject(iShellExtInit); Marshal.Release(iShellExtInitPtr); return(true); } finally { } } else { if (iContextMenu != null) { Marshal.ReleaseComObject(iContextMenu); iContextMenu = null; } if (iContextMenuPtr != null) { Marshal.ReleaseComObject(iContextMenuPtr); iContextMenuPtr = null; } return(false); } } else { iContextMenuPtr = IntPtr.Zero; iContextMenu = null; return(false); } }