/// <summary>Initializes a new instance of the <see cref="ShellLibrary"/> class.</summary> /// <param name="libraryName">Name of the library.</param> /// <param name="kf">The known folder identifier.</param> /// <param name="overwrite">if set to <c>true</c> [overwrite].</param> public ShellLibrary2(string libraryName, KNOWNFOLDERID kf = KNOWNFOLDERID.FOLDERID_Libraries, bool overwrite = false) { lib = new IShellLibrary(); name = libraryName; var item = lib.SaveInKnownFolder(kf.Guid(), libraryName, overwrite ? LIBRARYSAVEFLAGS.LSF_OVERRIDEEXISTING : LIBRARYSAVEFLAGS.LSF_FAILIFTHERE); Init(item); }
private static void AssertSingleFolderOutput(KNOWNFOLDERID expectedId, Collection <PSObject> output) { Assert.IsNotNull(output); Assert.AreEqual(1, output.Count); var psObj = output.First(); Assert.IsNotNull(psObj); Assert.IsInstanceOfType(psObj.BaseObject, typeof(KnownFolder)); Assert.AreEqual(expectedId.value, ((KnownFolder)psObj.BaseObject).FolderId); }
private void RedirectOneFolder(KnownFolder folder, string newPath) { if (!folder.CanRedirect) { throw new InvalidOperationException(string.Format("Folder '{0}' cannot be redirected.", folder.Name)); } string currentPath = folder.Path; if (!this.ShouldProcess(folder.Name, string.Format("Redirect from {0} to {1}", currentPath, newPath))) { return; } if (!this.Force && !this.ShouldContinue("Do it?", "Folder redirection", ref this.yesToAll, ref this.noToAll)) { return; } var id = new KNOWNFOLDERID(folder.FolderId); var flags = KF_REDIRECT_FLAGS.KF_REDIRECT_NONE; if (this.CheckOnly) { flags |= KF_REDIRECT_FLAGS.KF_REDIRECT_CHECK_ONLY; } if (!this.DontMoveExistingData) { flags |= KF_REDIRECT_FLAGS.KF_REDIRECT_COPY_CONTENTS | KF_REDIRECT_FLAGS.KF_REDIRECT_DEL_SOURCE_CONTENTS; } string error; HResult hr = this.knownFolderManager.Redirect(ref id, IntPtr.Zero, flags, newPath, 0, null, out error); if (hr != HResult.S_OK) { if (string.IsNullOrEmpty(error)) { Marshal.ThrowExceptionForHR(unchecked ((int)hr)); this.WriteWarning(string.Format("Redirection returned success code other than S_OK ({0})", hr)); } else { throw new TargetInvocationException( error, Marshal.GetExceptionForHR(unchecked ((int)hr))); } } if (this.PassThru) { this.WriteObject(folder); } }
/// <inheritdoc /> public override String ToString() { StringBuilder builder = new StringBuilder(); builder.Append(base.ToString()); builder.AppendFormat("DisplayName: {0}", KNOWNFOLDERID.GetDisplayName(KnownFolderID)); builder.AppendLine(); builder.AppendFormat("KnownFolderID: {0}", KnownFolderID); builder.AppendLine(); builder.AppendFormat("Offset: {0} (0x{0:X})", Offset); builder.AppendLine(); return(builder.ToString()); }
private IKnownFolder GetKnownFolderById(KNOWNFOLDERID knownFolderId) { IKnownFolder nativeKnownFolder; try { this.knownFolderManager.GetFolder(ref knownFolderId, out nativeKnownFolder); } catch (FileNotFoundException x) { throw new FileNotFoundException(string.Format("Known folder not found: {0}", knownFolderId.value), x); } return(nativeKnownFolder); }
/// <summary>Initializes a new instance of the <see cref="ShellItem"/> class.</summary> /// <param name="knownFolder">A known folder reference.</param> protected ShellItem(KNOWNFOLDERID knownFolder) { if (IsMin7) { SHGetKnownFolderItem(knownFolder.Guid(), KNOWN_FOLDER_FLAG.KF_FLAG_DEFAULT, SafeTokenHandle.Null, typeof(IShellItem).GUID, out var ppv).ThrowIfFailed(); Init((IShellItem)ppv); } else { var csidl = knownFolder.SpecialFolder(); if (csidl == null) { throw new ArgumentOutOfRangeException(nameof(knownFolder), @"Cannot translate this known folder to a value understood by systems prior to Windows 7."); } var path = new StringBuilder(MAX_PATH); SHGetFolderPath(IntPtr.Zero, (int)csidl.Value, SafeTokenHandle.Null, SHGFP.SHGFP_TYPE_CURRENT, path).ThrowIfFailed(); Init(ShellUtil.GetShellItemForPath(path.ToString())); } }
private IEnumerable <IKnownFolder> GetAll() { KNOWNFOLDERID[] ids; object boxpIds = IntPtr.Zero; var h = GCHandle.Alloc(boxpIds, GCHandleType.Pinned); try { uint count = 0; this.knownFolderManager.GetFolderIds(h.AddrOfPinnedObject(), ref count); IntPtr pIds = (IntPtr)boxpIds; if (IntPtr.Zero == pIds) { throw new InvalidOperationException("GetFolderIds returned NULL"); } try { ids = new KNOWNFOLDERID[count]; var ptr = pIds.ToInt64(); for (uint u = 0; u < count; ++u) { ids[u] = (KNOWNFOLDERID)Marshal.PtrToStructure((IntPtr)ptr, typeof(KNOWNFOLDERID)); ptr += Marshal.SizeOf(typeof(KNOWNFOLDERID)); } } finally { Marshal.FreeCoTaskMem(pIds); } } finally { h.Free(); } var result = ids.Select(kfi => this.GetKnownFolderById(kfi)); return(result); }
public void Can_obtain_all_folder_ids() { var knownFolderManager = (IKnownFolderManager) new KnownFolderManager(); uint count = 0; object ppIds = IntPtr.Zero; var h = GCHandle.Alloc(ppIds, GCHandleType.Pinned); try { knownFolderManager.GetFolderIds(h.AddrOfPinnedObject(), ref count); IntPtr pIds = (IntPtr)ppIds; if (IntPtr.Zero == pIds) { throw new InvalidOperationException("GetFolderIds returned NULL"); } try { var ids = new KNOWNFOLDERID[count]; var ptr = pIds.ToInt64(); for (uint u = 0; u < count; ++u) { ids[u] = (KNOWNFOLDERID)Marshal.PtrToStructure((IntPtr)ptr, typeof(KNOWNFOLDERID)); ptr += Marshal.SizeOf(typeof(KNOWNFOLDERID)); } foreach (var id in ids) { Assert.AreNotEqual(Guid.Empty, id.value); } } finally { Marshal.FreeCoTaskMem(pIds); } } finally { h.Free(); } }
public void GetKnownFolderFromGuidTest() { const KNOWNFOLDERID id = KNOWNFOLDERID.FOLDERID_Desktop; Assert.That(GetKnownFolderFromGuid(id.Guid()), Is.EqualTo(id)); }
/// <summary>Retrieves the <see cref="Environment.SpecialFolder"/> associated with a <see cref="KNOWNFOLDERID"/> if it exists.</summary> /// <param name="id">The known folder.</param> /// <returns>The <see cref="Environment.SpecialFolder"/> if defined, <c>null</c> otherwise.</returns> public static Environment.SpecialFolder?SpecialFolder(this KNOWNFOLDERID id) => typeof(KNOWNFOLDERID).GetField(id.ToString()).GetCustomAttributes <KnownFolderDetailAttribute>().Select(a => (Environment.SpecialFolder?)a.Equivalent).FirstOrDefault();
/// <summary>Retrieves the PIDL associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The PIDL.</returns> public static PIDL PIDL(this KNOWNFOLDERID id) { SHGetKnownFolderIDList(id.Guid(), stdGetFlags, HTOKEN.NULL, out var pidl); return(pidl); }
/// <summary>Retrieves the name associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The name.</returns> public static string Name(this KNOWNFOLDERID id) => id.GetRegistryProperty <string>("Name");
/// <summary>Retrieves the Guid associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The GUID associated with the <paramref name="id"/> or <see cref="Guid.Empty"/> if no association exists.</returns> public static Guid Guid(this KNOWNFOLDERID id) => AssociateAttribute.GetGuidFromEnum(id);
/// <summary>Gets a registry property associated with this known folder.</summary> /// <typeparam name="T">Return type.</typeparam> /// <param name="id">The known folder.</param> /// <param name="valueName">Name of the property (value under registry key).</param> /// <returns>Retrieved value or default(T) if no value exists.</returns> public static T GetRegistryProperty <T>(this KNOWNFOLDERID id, string valueName) => (T)Microsoft.Win32.Registry.GetValue(RegPath + id.Guid().ToString("B"), valueName, default(T));
/// <summary>Retrieves the PIDL associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The PIDL.</returns> public static PIDL PIDL(this KNOWNFOLDERID id) { SHGetKnownFolderIDList(id.Guid(), stdGetFlags, SafeTokenHandle.Null, out var pidl); return(pidl); }
/// <summary>Retrieves the full path associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The path.</returns> public static string FullPath(this KNOWNFOLDERID id) { SHGetKnownFolderPath(id.Guid(), stdGetFlags, HTOKEN.NULL, out var path); return(path); }
public void GetKnownFolderFromPathTest() { const KNOWNFOLDERID id = KNOWNFOLDERID.FOLDERID_Desktop; Assert.That(GetKnownFolderFromPath(id.FullPath()), Is.EqualTo(id)); }
/// <summary>Retrieves the full path associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The path.</returns> public static string FullPath(this KNOWNFOLDERID id) { SHGetKnownFolderPath(id.Guid(), stdGetFlags, SafeTokenHandle.Null, out var path); return(path.ToString(-1)); }
public void GetPathForKnownFolderTest() { const KNOWNFOLDERID id = KNOWNFOLDERID.FOLDERID_Desktop; Assert.That(GetPathForKnownFolder(id.Guid()), Is.EqualTo(id.FullPath())); }
/// <summary>Retrieves the IKnownFolder associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The <see cref="IKnownFolder"/> instance.</returns> public static IKnownFolder GetIKnownFolder(this KNOWNFOLDERID id) => new IKnownFolderManager().GetFolder(id.Guid());
/// <summary>Retrieves the IShellFolder associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The <see cref="IShellFolder"/> instance.</returns> public static IShellFolder GetIShellFolder(this KNOWNFOLDERID id) { using var desktop = ComReleaserFactory.Create(new ShellDesktop() as IShellFolder); using var pidl = id.PIDL(); return(desktop.Item.BindToObject <IShellFolder>(pidl)); }
/// <summary>Initializes a new instance of the <see cref="ShellLibrary"/> class.</summary> /// <param name="knownFolderId">The known folder identifier.</param> /// <param name="readOnly">if set to <c>true</c> [read only].</param> public ShellLibrary2(KNOWNFOLDERID knownFolderId, bool readOnly = false) { lib = new IShellLibrary(); lib.LoadLibraryFromKnownFolder(knownFolderId.Guid(), readOnly ? STGM.STGM_READ : STGM.STGM_READWRITE); Init(knownFolderId.GetIShellItem()); }
/// <summary>Retrieves the IShellItem associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The <see cref="IShellItem"/> instance.</returns> public static IShellItem GetIShellItem(this KNOWNFOLDERID id) { SHGetKnownFolderItem(id.Guid(), KNOWN_FOLDER_FLAG.KF_FLAG_DEFAULT, HTOKEN.NULL, typeof(IShellItem).GUID, out var ppv).ThrowIfFailed(); return((IShellItem)ppv); }
/// <summary>Initializes a new instance of the <see cref="ShellItem"/> class.</summary> /// <param name="knownFolder">A known folder value.</param> public ShellFolder(KNOWNFOLDERID knownFolder) : base(knownFolder) { iShellFolder = GetInstance(); }
/// <summary>Retrieves the name associated with a <see cref="KNOWNFOLDERID"/>.</summary> /// <param name="id">The known folder.</param> /// <returns>The name.</returns> public static string Name(this KNOWNFOLDERID id) => id.GetIKnownFolder().Name();