示例#1
0
        private static IEnumerable <string> GetFolders(ModernShell.IShellItem shellItem)
        {
            var id           = new Guid(ModernShell.InterfaceGuids.IShellItemArray);
            var shellLibrary = (ModernShell.IShellLibrary) new ModernShell.ShellLibrary();
            var shellItems   = default(ModernShell.IShellItemArray);

            try
            {
                shellLibrary.LoadLibraryFromItem(shellItem, ModernShell.AccessModes.Read);
                try
                {
                    var result = shellLibrary.GetFolders(ModernShell.LibraryFolderFilter.AllItems, ref id, out shellItems);
                    if (result == ModernShell.HResult.S_OK)
                    {
                        foreach (var folder in GetFolders(shellItems))
                        {
                            yield return(folder);
                        }
                    }
                }
                finally
                {
                    Marshal.ReleaseComObject(shellItems);
                }
            }
            finally
            {
                Marshal.ReleaseComObject(shellLibrary);
            }
        }
示例#2
0
        private static string GetDisplayName(ModernShell.IShellItem shellItem, ModernShell.SIGDN sigdn)
        {
            var pointer = shellItem.GetDisplayName(sigdn);
            var result  = Marshal.PtrToStringUni(pointer);

            Marshal.FreeCoTaskMem(pointer);
            return(result);
        }