Ejemplo n.º 1
0
        public static Environment.SpecialFolder?CSIDLToShellFolder(ShellAPI.CSIDL csidl)
        {
            foreach (var val in Enum.GetValues(typeof(KnownFolderIds)))
            {
                var csidlAttributes = EnumAttributeUtils <CsidlAttribute, KnownFolderIds> .FindAllAttributes(val).ToArray();

                var spFolderAttributes = EnumAttributeUtils <SpecialFolderAttribute, KnownFolderIds> .FindAllAttributes(val).ToArray();

                for (int i = 0; i < csidlAttributes.Length; i++)
                {
                    if (csidlAttributes[i].CSIDL == csidl)
                    {
                        if (spFolderAttributes.Length >= csidlAttributes.Length)
                        {
                            return(spFolderAttributes[i].SpecialFolder);
                        }
                        else if (spFolderAttributes.Length >= 0)
                        {
                            return(spFolderAttributes[0].SpecialFolder);
                        }
                    }
                }
            }
            return(null);

            //var enumerator = _shellFolderLookupDic.Value.GetEnumerator();

            //while (enumerator.MoveNext())
            //    if (enumerator.Current.Value.Equals(csidl))
            //        return enumerator.Current.Key;

            //throw new ArgumentException("This CSIDL path not supported");
        }
Ejemplo n.º 2
0
        public static KnownFolder FromCsidl(ShellAPI.CSIDL csidl)
        {
            var folderManager = (IKnownFolderManager) new KnownFolderManager();

            Guid knownFolderID;

            folderManager.FolderIdFromCsidl((int)csidl, out knownFolderID);
            IKnownFolder knowFolderInterface;

            folderManager.GetFolder(knownFolderID, out knowFolderInterface);
            return(new KnownFolder(knowFolderInterface));
        }
Ejemplo n.º 3
0
        public static Environment.SpecialFolder CSIDLToShellFolder(ShellAPI.CSIDL csidl)
        {
            var enumerator = _shellFolderLookupDic.GetEnumerator();

            while (enumerator.MoveNext())
            {
                if (enumerator.Current.Value.Equals(csidl))
                {
                    return(enumerator.Current.Key);
                }
            }

            throw new ArgumentException("This CSIDL path not supported");
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Gets the path to the system special folder identified by the specified enumeration.
        /// </summary>
        public static string GetFolderPath(ShellAPI.CSIDL folder)
        {
            PIDL pidlLookup = CSIDLtoPIDL(folder);

            try
            {
                return(FileSystemInfoEx.PIDLToPath(pidlLookup));
            }
            finally { if (pidlLookup != null)
                      {
                          pidlLookup.Free();
                      }
            }
        }
Ejemplo n.º 5
0
        public static int GetSpecialFolderImageIndex(ShellAPI.CSIDL pidl)
        {
            IntPtr tempPidl = IntPtr.Zero;

            ShellAPI.SHGetSpecialFolderLocation(IntPtr.Zero, pidl, out tempPidl);

            ShellAPI.SHFILEINFO shfiSmall = new ShellAPI.SHFILEINFO();
            ShellAPI.SHGetFileInfo(tempPidl, 0, ref shfiSmall, ShellAPI.cbFileInfo,
                                   ShellAPI.SHGFI.PIDL |
                                   ShellAPI.SHGFI.ICON |
                                   ShellAPI.SHGFI.SMALLICON |
                                   ShellAPI.SHGFI.SYSICONINDEX
                                   );
            return(shfiSmall.iIcon);
        }
Ejemplo n.º 6
0
        public DirectoryInfoEx(ShellAPI.CSIDL csidl)
        {
            PIDL pidlLookup = CSIDLtoPIDL(csidl);

            try
            {
                init(pidlLookup);
                checkProperties();
            }
            finally
            {
                //if (pidlLookup != null) pidlLookup.Free();
                pidlLookup = null;
            }
        }
Ejemplo n.º 7
0
 internal ShellItem GetSpecialFolderShellItem(ShellAPI.CSIDL rootFolder)
 {
     return(new ShellItem(this, rootFolder));
 }
Ejemplo n.º 8
0
 public CsidlAttribute(ShellAPI.CSIDL csidl)
 {
     CSIDL = csidl;
 }
Ejemplo n.º 9
0
 public static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, ShellAPI.CSIDL nFolder, out IntPtr ppidl);
Ejemplo n.º 10
0
 public static extern int SHGetFolderPath(IntPtr hwndOwner, ShellAPI.CSIDL nFolder, IntPtr hToken, ShellAPI.SHGFP dwFlags, StringBuilder pszPath);
Ejemplo n.º 11
0
        public void ShowContextMenuForCSIDL(IntPtr handleOwner, ShellAPI.CSIDL csidl, Point pointScreen)
        {
            // Release all resources first.
            ReleaseAll();

            IntPtr pMenu = IntPtr.Zero;
            var    hook  = new LocalWindowsHook(HookType.WH_CALLWNDPROC);

            hook.HookInvoked += WindowsHookInvoked;

            try
            {
                IntPtr tempPidl;
                ShellAPI.SHGetSpecialFolderLocation(IntPtr.Zero, csidl, out tempPidl);
                _arrPIDLs      = new[] { tempPidl };
                _oParentFolder = GetDesktopFolder();

                if (false == GetContextMenuInterfaces(_oParentFolder, _arrPIDLs))
                {
                    ReleaseAll();
                    return;
                }

                pMenu = CreatePopupMenu();

                _oContextMenu.QueryContextMenu(
                    pMenu,
                    0,
                    CMD_FIRST,
                    CMD_LAST,
                    CMF.EXPLORE |
                    CMF.NORMAL |
                    ((Control.ModifierKeys & Keys.Shift) != 0 ? CMF.EXTENDEDVERBS : 0));

                hook.Install();

                uint nSelected = TrackPopupMenuEx(
                    pMenu,
                    TPM.RETURNCMD,
                    pointScreen.X,
                    pointScreen.Y,
                    handleOwner,
                    IntPtr.Zero);

                DestroyMenu(pMenu);
                pMenu = IntPtr.Zero;

                if (nSelected != 0)
                {
                    var strParentFolder = string.Empty;
                    InvokeCommand(_oContextMenu, nSelected, strParentFolder, pointScreen);
                }
            }
            finally
            {
                hook.Uninstall();
                if (pMenu != IntPtr.Zero)
                {
                    DestroyMenu(pMenu);
                }
                ReleaseAll();
            }
        }