/* * /// <summary> * /// Returns a known folder given its shell path, such as <c>C:\users\public\documents</c> or * /// <c>::{645FF040-5081-101B-9F08-00AA002F954E}</c> for the Recycle Bin. * /// </summary> * /// <param name="path">The path for the requested known folder; either a physical path or a virtual path.</param> * /// <returns>A known folder representing the specified name.</returns> * public static IKnownFolder FromPath(string path) { * return KnownFolderHelper.FromParsingName(path); * } */ /// <summary> /// Returns a known folder given its shell namespace parsing name, such as /// <c>::{645FF040-5081-101B-9F08-00AA002F954E}</c> for the Recycle Bin. /// </summary> /// <param name="parsingName">The parsing name (or path) for the requested known folder.</param> /// <returns>A known folder representing the specified name.</returns> /// <exception cref="System.ArgumentException">Thrown if the given parsing name is invalid.</exception> /// public static IKnownFolder FromParsingNameOnly(string parsingName) { var k = new KnownFolderManagerClass(); IKnownFolderNative folder = null; k.FindFolderFromPath(parsingName, 0, out folder); return((IKnownFolder)folder); }
/// <summary> /// Returns the native known folder (IKnownFolderNative) given a PID list /// </summary> /// <param name="pidl"></param> /// <returns></returns> internal static IKnownFolderNative FromPIDL(IntPtr pidl) { KnownFolderManagerClass knownFolderManager = new KnownFolderManagerClass(); IKnownFolderNative knownFolder; HResult hr = knownFolderManager.FindFolderFromIDList(pidl, out knownFolder); return (hr == HResult.Ok) ? knownFolder : null; }
/// <summary> /// Returns the native known folder (IKnownFolderNative) given a PID list /// </summary> /// <param name="pidl"></param> /// <returns></returns> internal static IKnownFolderNative FromPIDL(IntPtr pidl) { KnownFolderManagerClass knownFolderManager = new KnownFolderManagerClass(); IKnownFolderNative knownFolder; HResult hr = knownFolderManager.FindFolderFromIDList(pidl, out knownFolder); return((hr == HResult.S_OK) ? knownFolder : null); }
/// <summary> /// Returns a known folder given a globally unique identifier. /// </summary> /// <param name="knownFolderId">A GUID for the requested known folder.</param> /// <returns>A known folder representing the specified name.</returns> /// <exception cref="System.ArgumentException">Thrown if the given Known Folder ID is invalid.</exception> public static IKnownFolder FromKnownFolderId(Guid knownFolderId) { IKnownFolderNative knownFolderNative; KnownFolderManagerClass knownFolderManager = new KnownFolderManagerClass(); HResult hr = knownFolderManager.GetFolder(knownFolderId, out knownFolderNative); if (hr != HResult.Ok) { throw new ShellException(hr); } IKnownFolder kf = GetKnownFolder(knownFolderNative); if (kf == null) { throw new ArgumentException(LocalizedMessages.KnownFolderInvalidGuid, "knownFolderId"); } return kf; }
private static ReadOnlyCollection <IKnownFolder> GetAllFolders() { // Should this method be thread-safe?? (It'll take a while // to get a list of all the known folders, create the managed wrapper // and return the read-only collection. IList <IKnownFolder> foldersList = new List <IKnownFolder>(); uint count; IntPtr folders = IntPtr.Zero; try { KnownFolderManagerClass knownFolderManager = new KnownFolderManagerClass(); knownFolderManager.GetFolderIds(out folders, out count); if (count > 0 && folders != IntPtr.Zero) { // Loop through all the KnownFolderID elements for (int i = 0; i < count; i++) { // Read the current pointer IntPtr current = new IntPtr(folders.ToInt64() + (Marshal.SizeOf(typeof(Guid)) * i)); // Convert to Guid Guid knownFolderID = (Guid)Marshal.PtrToStructure(current, typeof(Guid)); IKnownFolder kf = KnownFolderHelper.FromKnownFolderIdInternal(knownFolderID); // Add to our collection if it's not null (some folders might not exist on the system // or we could have an exception that resulted in the null return from above method call if (kf != null) { foldersList.Add(kf); } } } } finally { if (folders != IntPtr.Zero) { Marshal.FreeCoTaskMem(folders); } } return(new ReadOnlyCollection <IKnownFolder>(foldersList)); }
/// <summary> /// Returns a known folder given a globally unique identifier. /// </summary> /// <param name="knownFolderId">A GUID for the requested known folder.</param> /// <returns>A known folder representing the specified name.</returns> /// <exception cref="System.ArgumentException">Thrown if the given Known Folder ID is invalid.</exception> public static IKnownFolder FromKnownFolderId(Guid knownFolderId) { IKnownFolderNative knownFolderNative; KnownFolderManagerClass knownFolderManager = new KnownFolderManagerClass(); HResult hr = knownFolderManager.GetFolder(knownFolderId, out knownFolderNative); if (hr != HResult.S_OK) { throw new Exception(hr.ToString()); } IKnownFolder kf = GetKnownFolder(knownFolderNative); if (kf == null) { throw new ArgumentException("Invalid GUID", "knownFolderId"); } return(kf); }
private static ReadOnlyCollection<IKnownFolder> GetAllFolders() { // Should this method be thread-safe?? (It'll take a while // to get a list of all the known folders, create the managed wrapper // and return the read-only collection. IList<IKnownFolder> foldersList = new List<IKnownFolder>(); uint count; IntPtr folders = IntPtr.Zero; try { KnownFolderManagerClass knownFolderManager = new KnownFolderManagerClass(); knownFolderManager.GetFolderIds(out folders, out count); if (count > 0 && folders != IntPtr.Zero) { // Loop through all the KnownFolderID elements for (int i = 0; i < count; i++) { // Read the current pointer IntPtr current = new IntPtr(folders.ToInt64() + (Marshal.SizeOf(typeof(Guid)) * i)); // Convert to Guid Guid knownFolderID = (Guid)Marshal.PtrToStructure(current, typeof(Guid)); IKnownFolder kf = KnownFolderHelper.FromKnownFolderIdInternal(knownFolderID); // Add to our collection if it's not null (some folders might not exist on the system // or we could have an exception that resulted in the null return from above method call if (kf != null) { foldersList.Add(kf); } } } } finally { if (folders != IntPtr.Zero) { Marshal.FreeCoTaskMem(folders); } } return new ReadOnlyCollection<IKnownFolder>(foldersList); }