Example #1
0
        public void KnownFolderManager_GetKnownFolder()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);

            folder.Should().NotBeNull();
        }
Example #2
0
        public void KnownFolderManager_implements_IKnownFolderManager()
        {
            KnownFolderManager  obj = new KnownFolderManager();
            IKnownFolderManager knownFolderManager = (IKnownFolderManager)obj;

            Assert.IsNotNull(knownFolderManager);
        }
Example #3
0
        public void KnownFolder_GetRedirectionCaps()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Libraries);

            folder.GetRedirectionCapabilities().Should().Be(KF_REDIRECTION_CAPABILITIES.REDIRECTABLE);
        }
        /// <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;
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManagerClass();

            HRESULT hr = knownFolderManager.GetFolder(knownFolderId, out knownFolderNative);

            if (hr == HRESULT.S_OK)
            {
                IKnownFolder kf = GetKnownFolder(knownFolderNative);

                if (kf != null)
                {
                    return(kf);
                }
                else
                {
                    throw new ArgumentException("Given Known Folder ID is invalid.", "knownFolderId");
                }
            }
            else
            {
                throw Marshal.GetExceptionForHR((int)hr);
            }
        }
Example #5
0
        public void KnownFolder_GetId()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);

            folder.GetId().Should().Be(KNOWNFOLDERID.Windows);
        }
Example #6
0
        public void KnownFolder_GetCategory()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.Windows);

            folder.GetCategory().Should().Be(KnownFolderCategory.Fixed);
        }
Example #7
0
        public void KnownFolder_GetCategory()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);

            folder.GetCategory().Should().Be(KF_CATEGORY.FIXED);
        }
Example #8
0
    /// <summary>Retrieves the path of a known folder</summary>
    /// <param name="knownFolderId">GUID of the known folderparam>
    /// <returns>The path of the known folder with the specified GUID</returns>
    private static string getKnownFolder(Guid knownFolderId)
    {
        var instance = new KnownFolderManagerImpl();

        if (instance == null)
        {
            throw new COMException("Could not create instance of known folder manager coclass");
        }

        IKnownFolderManager knownFolderManager = instance as IKnownFolderManager;

        if (knownFolderManager == null)
        {
            throw new COMException("Could not query known folder manager interface");
        }

        IKnownFolder knownFolder;

        knownFolderManager.GetFolder(ref knownFolderId, out knownFolder);
        if (knownFolder == null)
        {
            throw new COMException("Could not query known folder");
        }

        string path;

        knownFolder.GetPath(0, out path);
        return(path);
    }
Example #9
0
        public void KnownFolder_GetRedirectionCaps()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.Libraries);

            folder.GetRedirectionCapabilities().Should().Be(KnownFolderRedirectionCapabilities.Redirectable);
        }
Example #10
0
        public void ShellItem_GetDisplayName()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);
            IShellItem          item    = folder.GetShellItem(0, new Guid(InterfaceIds.IID_IShellItem));

            item.GetDisplayName(SIGDN.NORMALDISPLAY).Should().Be("Windows");
        }
Example #11
0
        public void ShellItem_GetDisplayName()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.Windows);
            IShellItem          item    = folder.GetShellItem(0, new Guid(InterfaceIds.IID_IShellItem));

            item.GetDisplayName(ShellItemDisplayNames.NormalDisplay).Should().Be("Windows");
        }
Example #12
0
        public void KnownFolder_GetFolderType()
        {
            // Most known folders don't have a FolderType associated and will throw a COMException with E_FAIL.
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Contacts);

            folder.GetFolderType().Should().Be(FOLDERTYPEID.Contacts);
        }
Example #13
0
        /// <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 null if Known Folder is not found or could not be created.</returns>
        internal static IKnownFolder FromKnownFolderIdInternal(Guid knownFolderId)
        {
            IKnownFolderNative  knownFolderNative;
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManagerClass();

            HResult hr = knownFolderManager.GetFolder(knownFolderId, out knownFolderNative);

            return((hr == HResult.Ok) ? GetKnownFolder(knownFolderNative) : null);
        }
Example #14
0
        public void KnownFolderManager_RoundTripId()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            int csidl = manager.FolderIdToCsidl(KNOWNFOLDERID.Windows);

            csidl.Should().Be(36);
            Guid id = manager.FolderIdFromCsidl(csidl);

            id.Should().Be(KNOWNFOLDERID.Windows);
        }
Example #15
0
            /// <summary>Gets the KNOWNFOLDERID enum from a path.</summary>
            /// <param name="path">The folder path.</param>
            /// <returns>The KNOWNFOLDERID enum.</returns>
            public static KNOWNFOLDERID GetKnownFolderFromPath(string path)
            {
                if (Environment.OSVersion.Version.Major < 6)
                {
                    return(Enum.GetValues(typeof(KNOWNFOLDERID)).Cast <KNOWNFOLDERID>().Single(k => string.Equals(k.FullPath(), path, StringComparison.InvariantCultureIgnoreCase)));
                }
                var ikfm = new IKnownFolderManager();

                return(GetKnownFolderFromGuid(ikfm.FindFolderFromPath(path, FFFP_MODE.FFFP_EXACTMATCH).GetId()));
            }
Example #16
0
        public void KnownFolder_GetIdList()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);

            using (var id = folder.GetIDList(0))
            {
                id.IsInvalid.Should().BeFalse();
                ShellDesktopMethods.GetNameFromId(id, SIGDN.PARENTRELATIVE).Should().Be("Windows");
            }
        }
Example #17
0
        public void KnownFolder_GetIdList()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.Windows);

            using (var id = folder.GetIDList(0))
            {
                id.IsInvalid.Should().BeFalse();
                ShellMethods.GetNameFromId(id, ShellItemDisplayNames.ParentRelative).Should().Be("Windows");
            }
        }
Example #18
0
        public void KnownFolder_GetIShellItem()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);
            IShellItem          item    = folder.GetShellItem(0, new Guid(InterfaceIds.IID_IShellItem));

            item.Should().NotBeNull();
            IShellItem2 item2 = (IShellItem2)folder.GetShellItem(0, new Guid(InterfaceIds.IID_IShellItem2));

            item2.Should().NotBeNull();
        }
Example #19
0
        public void KnownFolder_GetPath()
        {
            using (var id = ShellDesktopMethods.GetKnownFolderId(KNOWNFOLDERID.Windows))
            {
                id.IsInvalid.Should().BeFalse();
                ShellDesktopMethods.GetNameFromId(id, SIGDN.PARENTRELATIVE).Should().Be("Windows");

                IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
                IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.Windows);
                folder.GetPath(0).Should().Be(ShellDesktopMethods.GetNameFromId(id, SIGDN.FILESYSPATH));
            }
        }
Example #20
0
        public void KnownFolder_GetPath()
        {
            using (var id = ShellMethods.GetKnownFolderId(KnownFolderIds.Windows))
            {
                id.IsInvalid.Should().BeFalse();
                ShellMethods.GetNameFromId(id, ShellItemDisplayNames.ParentRelative).Should().BeEquivalentTo("Windows");

                IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
                IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.Windows);
                folder.GetPath(0).Should().BeEquivalentTo(ShellMethods.GetNameFromId(id, ShellItemDisplayNames.FilesysPath));
            }
        }
Example #21
0
        public void GetKnownFolderIds_Basic()
        {
            var ids = ShellDesktopMethods.GetKnownFolderIds();

            ids.Should().NotBeEmpty();

            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();

            // Check a few
            foreach (var id in ids.Take(5))
            {
                manager.GetFolder(id).Should().NotBeNull();
            }
        }
Example #22
0
        /// <summary>
        /// Returns the known folder given its canonical name.
        /// </summary>
        /// <param name="canonicalName">A non-localized canonical name for the known folder, such as MyComputer.</param>
        /// <returns>A known folder representing the specified name.</returns>
        /// <exception cref="System.ArgumentException">Thrown if the given canonical name is invalid or if the KnownFolder could not be created.</exception>
        public static IKnownFolder FromCanonicalName(string canonicalName)
        {
            IKnownFolderNative  knownFolderNative;
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManagerClass();

            knownFolderManager.GetFolderByName(canonicalName, out knownFolderNative);
            IKnownFolder kf = KnownFolderHelper.GetKnownFolder(knownFolderNative);

            if (kf == null)
            {
                throw new ArgumentException(LocalizedMessages.ShellInvalidCanonicalName, "canonicalName");
            }
            return(kf);
        }
Example #23
0
        public void KnownFolder_GetDefinition()
        {
            IKnownFolderManager manager = ShellMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KnownFolderIds.LocalAppData);

            using (KnownFolderDefinition definition = new KnownFolderDefinition())
            {
                folder.GetFolderDefinition(definition);
                definition.FolderTypeId.Should().Be(Guid.Empty);
                definition.Category.Should().Be(KnownFolderCategory.PerUser);
                definition.Name.Should().Be("Local AppData");
                definition.RelativePath.Should().Be(@"AppData\Local");
                definition.Parent.Should().Be(KnownFolderIds.Profile);
            }
        }
        /// <summary>
        /// Returns the native known folder (IKnownFolderNative) given a PID list
        /// </summary>
        /// <param name="pidl"></param>
        /// <returns></returns>
        internal static IKnownFolderNative FromPIDL(IntPtr pidl)
        {
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManagerClass();
            IKnownFolderNative  knownFolder;
            HRESULT             hr = knownFolderManager.FindFolderFromIDList(pidl, out knownFolder);

            if (hr != HRESULT.S_OK)
            {
                return(null);
            }
            else
            {
                return(knownFolder);
            }
        }
Example #25
0
        public void KnownFolder_GetDefinition()
        {
            IKnownFolderManager manager = ShellDesktopMethods.GetKnownFolderManager();
            IKnownFolder        folder  = manager.GetFolder(KNOWNFOLDERID.LocalAppData);

            using (KNOWNFOLDER_DEFINITION definition = new KNOWNFOLDER_DEFINITION())
            {
                folder.GetFolderDefinition(definition);
                definition.FolderTypeId.Should().Be(Guid.Empty);
                definition.Category.Should().Be(KF_CATEGORY.PERUSER);
                definition.Name.Should().Be("Local AppData");
                definition.RelativePath.Should().Be(@"AppData\Local");
                definition.Parent.Should().Be(KNOWNFOLDERID.Profile);
            }
        }
        /// <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 null if Known Folder is not found or could not be created.</returns>
        internal static IKnownFolder FromKnownFolderIdInternal(Guid knownFolderId)
        {
            IKnownFolderNative  knownFolderNative;
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManagerClass();

            HRESULT hr = knownFolderManager.GetFolder(knownFolderId, out knownFolderNative);

            if (hr == HRESULT.S_OK)
            {
                return(GetKnownFolder(knownFolderNative));
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        /// Returns the known folder given its canonical name.
        /// </summary>
        /// <param name="canonicalName">A non-localized canonical name for the known folder, such as MyComputer.</param>
        /// <returns>A known folder representing the specified name.</returns>
        /// <exception cref="System.ArgumentException">Thrown if the given canonical name is invalid or if the KnownFolder could not be created.</exception>
        public static IKnownFolder FromCanonicalName(string canonicalName)
        {
            IKnownFolderNative  knownFolderNative;
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManagerClass();

            knownFolderManager.GetFolderByName(canonicalName, out knownFolderNative);
            IKnownFolder kf = KnownFolderHelper.GetKnownFolder(knownFolderNative);

            if (kf != null)
            {
                return(kf);
            }
            else
            {
                throw new ArgumentException("Canonical name is invalid.", "canonicalName");
            }
        }
Example #28
0
        public void SetFolderPath(ExtraSpecialFolder folder, string path)
        {
            Guid rfid;
            IKnownFolderManager knownFolderManager = (IKnownFolderManager) new KnownFolderManager();

            knownFolderManager.FolderIdFromCsidl((int)folder, out rfid);
            if (path == null)
            {
                IKnownFolder knownFolderInterface;
                knownFolderManager.GetFolder(ref rfid, out knownFolderInterface);
                knownFolderInterface.GetPath(KnownFolderPathFlags.KF_FLAG_DEFAULT_PATH, out path);
            }
            //knownFolderInterface.SetPath(KnownFolderPathFlags.KF_FLAG_DONT_UNEXPAND, path);
            string ppszError;

            knownFolderManager.Redirect(ref rfid, IntPtr.Zero, 0, path, 0, ref rfid, out ppszError);
        }
Example #29
0
        /// <summary>
        ///  Get the Guid identifiers for all known folders.
        /// </summary>
        public static unsafe IEnumerable <Guid> GetKnownFolderIds()
        {
            List <Guid> ids = new List <Guid>();

            IKnownFolderManager manager = GetKnownFolderManager();
            uint count = manager.GetFolderIds(out SafeComHandle buffer);

            using (buffer)
            {
                Guid *g = (Guid *)buffer.DangerousGetHandle();
                for (int i = 0; i < count; i++)
                {
                    ids.Add(*g++);
                }
            }

            return(ids);
        }
Example #30
0
        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;

            IKnownFolderManager knownFolderManager = (IKnownFolderManager) 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 = null;

                    // Get the known folder
                    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);
                    }
                }
            }

            Marshal.FreeCoTaskMem(folders);

            return(new ReadOnlyCollection <IKnownFolder>(foldersList));
        }
 protected override void BeginProcessing()
 {
     this.knownFolderManager = (IKnownFolderManager)new KnownFolderManager();
 }