public string ToString(PITEMID_CHILD pidl) { if (uType == STRRET_TYPE.WSTR) { if (pOleStr == IntPtr.Zero) { return(null); } string str = Marshal.PtrToStringUni(pOleStr); return(str); } else { string str; int res = StrRetToBSTR(this, pidl, out str); if (res < 0) { Marshal.ThrowExceptionForHR(res); } return(str); } }
public static IEnumerable <PITEMID_CHILD> Enumerate(this IShellFolder sf) { IEnumIDList ppenumIDList; sf.EnumObjects(IntPtr.Zero, 0x00020 /* SHCONTF_FOLDERS */ | 0x00040 /* SHCONTF_NONFOLDERS */, out ppenumIDList); if (ppenumIDList == null) { yield break; } var items = new PITEMID_CHILD[1]; while (true) { int fetched; ppenumIDList.Next(items.Length, items, out fetched); if (fetched == 0) { break; } yield return(items[0]); } }
private static extern int StrRetToBSTR(STRRET pstr, PITEMID_CHILD pidl, [MarshalAs(UnmanagedType.BStr)] out string pbstr);