示例#1
0
        /// <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);
        }
示例#2
0
        /// <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.");
        }