private void Init(KNOWNFOLDERID_Enum knownFolder) { if (IsMin7) { object ppv; SHGetKnownFolderItem(knownFolder.Guid(), KNOWN_FOLDER_FLAG.KF_FLAG_DEFAULT, AdvApi32.SafeTokenHandle.Null, typeof(IShellItem).GUID, out ppv); 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(Kernel32.MAX_PATH); SHGetFolderPath(IntPtr.Zero, (int)csidl.Value, AdvApi32.SafeTokenHandle.Null, SHGFP.SHGFP_TYPE_CURRENT, path); Init(new Uri(path.ToString())); } }
/// <summary>Initializes a new instance of the <see cref="ShellItem"/> class.</summary> /// <param name="knownFolder">A known folder.</param> public ShellItem(KNOWNFOLDERID_Enum knownFolder) { Init(knownFolder); }