コード例 #1
0
 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);
     }
 }
コード例 #2
0
    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]);
        }
    }
コード例 #3
0
 private static extern int StrRetToBSTR(STRRET pstr, PITEMID_CHILD pidl, [MarshalAs(UnmanagedType.BStr)] out string pbstr);