Utils/IconUtils.cs

(开头部分) 4KB

这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;

namespace XStart.Utils {
    class IconUtils {
        /// <summary>
        /// 获取exe文件中的图标
        /// </summary>
        /// <param name="exePath"></param>
        /// <returns></returns>
        public static List<System.Drawing.Image> GetIconImage(string exePath) {
            List<System.Drawing.Image> imageList = new List<System.Drawing.Image>();

            //第一步:获取程序中的图标数
            int iconCount = DllUtils.ExtractIconEx(exePath, -1, null, null, 0);

            //第二步:创建存放大/小图标的空间
            var largeIcons = new IntPtr[iconCount];
            var smallIcons = new IntPtr[iconCount];

            //第三步:抽取所有的大小图标保存到largeIcons和smallIcons中
            DllUtils.ExtractIconEx(exePath, 0, largeIcons, smallIcons, iconCount);

            //第四步:显示抽取的图标(推荐使用imageList和listview搭配显示)
            for (int i = 0; i < iconCount; i++) {
                IntPtr intPtr = largeIcons[i];
                if (intPtr != IntPtr.Zero) {
                    var icon = Icon.FromHandle(largeIcons[i]);
                    imageList.Add(icon.ToBitmap());
                    icon.Dispose();
                    // 销毁图标
                    DllUtils.DestroyIcon(largeIcons[i]);
                    // 向控件发送关闭指令
                    DllUtils.SendMessage(largeIcons[i], WinApi.WM_CLOSE, 0, 0);
                }
            }
            return imageList;
        }

        /// <summary>
        /// 获取文件类型或目录的关联图标
        /// </summary>
        /// <param name="fileName">文件类型的扩展名或文件的绝对路径</param>
        /// <param name="type">类型 file/dir</param>
        /// <param name="isLargeIcon">是否返回大图标</param>
        /// <returns>获取到的图标</returns>
        public static Icon GetIcon(string fileName, bool isLargeIcon) {
            DllUtils.SHFILEINFO shfi = new DllUtils.SHFILEINFO();
            uint fileInfo;

            if (isLargeIcon) {
                if (File.Exists(fileName)) {
                    fileInfo = (uint)WinApi.FileInfoFlags.SHGFI_ICON | (uint)WinApi.FileInfoFlags.SHGFI_USEFILEATTRIBUTES | (uint)WinApi.FileInfoFlags.SHGFI_LARGEICON;
                } else {
                    fileInfo = (uint)WinApi.FileInfoFlags.SHGFI_ICON | (uint)WinApi.FileInfoFlags.SHGFI_LARGEICON;
                }
            } else {
后面还有 31 行代码,解锁后查看完整代码

24 小时内免费解锁 3 个项目,之后 1 积分/个。 规则说明

AI 解读

登录后可用,每次 10 积分,解读结果公开显示在下面。

还没有人解读过这个文件。