/// <summary> /// Obtains the icon group resources from the provided root win32 resources directory. /// </summary> /// <param name="rootDirectory">The root resources directory to extract the icon group from.</param> /// <returns>The icon group resources, or <c>null</c> if none was found.</returns> /// <exception cref="ArgumentException">Occurs when the resource data is not readable.</exception> public static IconResource FromDirectory(IResourceDirectory rootDirectory) { var groupIconDirectory = (IResourceDirectory)rootDirectory.Entries[ResourceDirectoryHelper.IndexOfResourceDirectoryType(rootDirectory, ResourceType.GroupIcon)]; var iconDirectory = (IResourceDirectory)rootDirectory.Entries[ResourceDirectoryHelper.IndexOfResourceDirectoryType(rootDirectory, ResourceType.Icon)]; if (groupIconDirectory is null || iconDirectory is null) { return(null); } var result = new IconResource(); foreach (var iconGroupResource in groupIconDirectory.Entries.OfType <IResourceDirectory>()) { var dataEntry = iconGroupResource ?.Entries .OfType <IResourceData>() .FirstOrDefault(); if (dataEntry is null) { return(null); } if (!dataEntry.CanRead) { throw new ArgumentException("Icon group data is not readable."); } result.AddEntry(iconGroupResource.Id, IconGroupDirectory.FromReader(dataEntry.CreateReader(), iconDirectory)); } return(result); }
/// <summary> /// Obtains the version info resource from the provided root win32 resources directory. /// </summary> /// <param name="rootDirectory">The root resources directory to extract the version info from.</param> /// <returns>The version info resource, or <c>null</c> if none was found.</returns> public static VersionInfoResource FromDirectory(IResourceDirectory rootDirectory) { var versionDirectory = (IResourceDirectory)rootDirectory.Entries[ResourceDirectoryHelper.IndexOfResourceDirectoryType(rootDirectory, ResourceType.Version)]; var categoryDirectory = versionDirectory ?.Entries .OfType <IResourceDirectory>() .FirstOrDefault(); var dataEntry = categoryDirectory ?.Entries .OfType <IResourceData>() .FirstOrDefault(); if (dataEntry is null) { return(null); } if (dataEntry.CanRead) { var dataReader = dataEntry.CreateReader(); return(FromReader(ref dataReader)); } if (dataEntry.Contents is VersionInfoResource resource) { return(resource); } throw new ArgumentException("Version resource data is not readable."); }