void Initialize(IListItemEx[] items) {
this._Items = items;
IntPtr[] pidls = new IntPtr[items.Length];
IListItemEx parent = null;
for (int n = 0; n < items.Length; ++n) {
pidls[n] = Shell32.ILFindLastID(items[n].PIDL);
if (parent == null) {
if (items[n].ParsingName.Equals(ShellItem.Desktop.ParsingName)) {
parent = FileSystemListItem.ToFileSystemItem(IntPtr.Zero, ShellItem.Desktop.Pidl);
} else {
parent = items[n].Parent;
}
} else if (!items[n].Parent.Equals(parent)) {
throw new Exception("All shell items must have the same parent");
}
}
if (items.Length == 0) {
var desktop = KnownFolders.Desktop as ShellItem;
var ishellViewPtr = desktop.GetIShellFolder().CreateViewObject(IntPtr.Zero, typeof(IShellView).GUID);
var view = Marshal.GetObjectForIUnknown(ishellViewPtr) as IShellView;
view.GetItemObject(SVGIO.SVGIO_BACKGROUND, typeof(IContextMenu).GUID, out _Result);
Marshal.ReleaseComObject(view);
} else {
parent.GetIShellFolder().GetUIObjectOf(IntPtr.Zero, (uint)pidls.Length, pidls, typeof(IContextMenu).GUID, 0, out _Result);
}
m_ComInterface = (IContextMenu)Marshal.GetTypedObjectForIUnknown(_Result, typeof(IContextMenu));
m_ComInterface2 = m_ComInterface as IContextMenu2;
m_ComInterface3 = m_ComInterface as IContextMenu3;
m_MessageWindow = new MessageWindow(this);
}