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"); }
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)); }
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"); }
/// <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(); } } }
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); }
public DirectoryInfoEx(ShellAPI.CSIDL csidl) { PIDL pidlLookup = CSIDLtoPIDL(csidl); try { init(pidlLookup); checkProperties(); } finally { //if (pidlLookup != null) pidlLookup.Free(); pidlLookup = null; } }
internal ShellItem GetSpecialFolderShellItem(ShellAPI.CSIDL rootFolder) { return(new ShellItem(this, rootFolder)); }
public CsidlAttribute(ShellAPI.CSIDL csidl) { CSIDL = csidl; }
public static extern int SHGetSpecialFolderLocation(IntPtr hwndOwner, ShellAPI.CSIDL nFolder, out IntPtr ppidl);
public static extern int SHGetFolderPath(IntPtr hwndOwner, ShellAPI.CSIDL nFolder, IntPtr hToken, ShellAPI.SHGFP dwFlags, StringBuilder pszPath);
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(); } }