// This is not a small operation so let's make it a method private KnownFolderDefinition GetDefinition() { InternalKnownFolderDefinition internalDefinition; KnownFolderDefinition definition = new KnownFolderDefinition(); _knownFolder.GetFolderDefinition(out internalDefinition); try { definition.Category = internalDefinition.Category; definition.Name = Marshal.PtrToStringUni(internalDefinition.pszName); definition.Description = Marshal.PtrToStringUni(internalDefinition.pszDescription); definition.ParentID = internalDefinition.ParentID; definition.ParsingName = Marshal.PtrToStringUni(internalDefinition.pszParsingName); definition.Tooltip = Marshal.PtrToStringUni(internalDefinition.pszTooltip); definition.LocalizedName = Marshal.PtrToStringUni(internalDefinition.pszLocalizedName); definition.Icon = Marshal.PtrToStringUni(internalDefinition.pszIcon); definition.Security = Marshal.PtrToStringUni(internalDefinition.pszSecurity); definition.Attributes = internalDefinition.dwAttributes; definition.DefinitionFlags = internalDefinition.DefinitionFlags; definition.FolderTypeID = internalDefinition.FolderTypeID; } finally { Marshal.FreeCoTaskMem(internalDefinition.pszName); Marshal.FreeCoTaskMem(internalDefinition.pszDescription); Marshal.FreeCoTaskMem(internalDefinition.pszRelativePath); Marshal.FreeCoTaskMem(internalDefinition.pszParsingName); Marshal.FreeCoTaskMem(internalDefinition.pszTooltip); Marshal.FreeCoTaskMem(internalDefinition.pszLocalizedName); Marshal.FreeCoTaskMem(internalDefinition.pszIcon); Marshal.FreeCoTaskMem(internalDefinition.pszSecurity); } return(definition); }
/// <summary> /// <see cref="KNOWNFOLDER_DEFINITION" />を取得し、 /// 各プロパティを初期化します。 /// </summary> /// <param name="knownFolderInterface"></param> private void Initialize(IKnownFolder knownFolderInterface) { Contract.Requires(knownFolderInterface != null); KNOWNFOLDER_DEFINITION knownFolderDefinition; knownFolderInterface.GetFolderDefinition(out knownFolderDefinition); try { this.ParsingName = PtrToString(knownFolderDefinition.pszParsingName); this.CanonicalName = PtrToString(knownFolderDefinition.pszName); this.Category = (KnownFolderCategories)knownFolderDefinition.category; this.Description = PtrToString(knownFolderDefinition.pszDescription); this.ParentId = knownFolderDefinition.fidParent; this.RelativePath = PtrToString(knownFolderDefinition.pszRelativePath); InitializeResourceProperties(knownFolderDefinition); this.FolderDefinitionFlags = (FolderDefinitionFlags)knownFolderDefinition.kfdFlags; this.FileAttributes = (FileAttributes)knownFolderDefinition.dwAttributes; this.FolderTypeId = knownFolderDefinition.ftidType; this.FolderType = String.Empty; this.FolderId = knownFolderInterface.GetId(); InitializePath(knownFolderInterface); this.Redirection = (RedirectionCapability)knownFolderInterface.GetRedirectionCapabilities(); this.Security = PtrToString(knownFolderDefinition.pszSecurity); } finally { ShellNativeMethods.FreeKnownFolderDefinitionFields(ref knownFolderDefinition); } }
/// <summary>Retrieves the name associated with a <see cref="IKnownFolder"/>.</summary> /// <param name="kf">The known folder.</param> /// <returns>The name.</returns> public static string Name(this IKnownFolder kf) { var fd = kf.GetFolderDefinition(); try { return(fd.pszName.ToString()); } finally { FreeKnownFolderDefinitionFields(fd); } }
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); } }
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); } }
static KnownFolder CreateFolder(IKnownFolder iface) { KNOWNFOLDER_DEFINITION def = iface.GetFolderDefinition(); try { return(new KnownFolder(iface, Marshal.PtrToStringUni(def.pszName), Marshal.PtrToStringUni(def.pszParsingName))); } finally { Marshal.FreeCoTaskMem(def.pszName); Marshal.FreeCoTaskMem(def.pszDescription); Marshal.FreeCoTaskMem(def.pszRelativePath); Marshal.FreeCoTaskMem(def.pszParsingName); Marshal.FreeCoTaskMem(def.pszTooltip); Marshal.FreeCoTaskMem(def.pszLocalizedName); Marshal.FreeCoTaskMem(def.pszIcon); Marshal.FreeCoTaskMem(def.pszSecurity); } }
public static KNOWNFOLDER_DEFINITION FromKnownFolder(IKnownFolder knownFolder) { if (knownFolder == null) { throw new ArgumentNullException("knownFolder"); } KNOWNFOLDER_DEFINITION def; using (var handles = new KnownFolderDefinitionHandles()) { KNOWNFOLDER_DEFINITION_RAW rawDef; RuntimeHelpers.PrepareConstrainedRegions(); try { } finally { knownFolder.GetFolderDefinition(out rawDef); try { handles.SecureHandles(ref rawDef); } finally { // in case SecureHandles throws rawDef.FreeKnownFolderDefinitionFields(); } } def = new KNOWNFOLDER_DEFINITION(ref rawDef, handles); } return(def); }
public static KNOWNFOLDER_DEFINITION FromKnownFolder(IKnownFolder knownFolder) { if (knownFolder == null) { throw new ArgumentNullException("knownFolder"); } KNOWNFOLDER_DEFINITION def; using (var handles = new KnownFolderDefinitionHandles()) { KNOWNFOLDER_DEFINITION_RAW rawDef; RuntimeHelpers.PrepareConstrainedRegions(); try { } finally { knownFolder.GetFolderDefinition(out rawDef); try { handles.SecureHandles(ref rawDef); } finally { // in case SecureHandles throws rawDef.FreeKnownFolderDefinitionFields(); } } def = new KNOWNFOLDER_DEFINITION(ref rawDef, handles); } return def; }