首页 > 解决方案 > 我怎样才能知道图标是否相同?

问题描述

这些天我正在做一个文件浏览器。

我得到这样的文件和目录的图标。

 public static ImageSource FindIconForDirectory(string DirectoryName)
        {            
            SHFILEINFO shinfo = new SHFILEINFO();
            SHGetFileInfo(
                DirectoryName,
                0, ref shinfo, (uint)Marshal.SizeOf(shinfo),
                SHGFI_ICON | SHGFI_LARGEICON);            
                using (Icon i = System.Drawing.Icon.FromHandle(shinfo.hIcon))
                {
                    ImageSource img = Imaging.CreateBitmapSourceFromHIcon(
                                            i.Handle,
                                            new Int32Rect(0, 0, i.Width, i.Height),
                                            BitmapSizeOptions.FromEmptyOptions());

                }
            return img;
        }

 public static ImageSource FindIconForFilename(string fileName)
        {
            var icon = System.Drawing.Icon.ExtractAssociatedIcon(fileName);
            return  Imaging.CreateBitmapSourceFromHIcon(
                icon .Handle,
                Int32Rect.Empty,
                BitmapSizeOptions.FromEmptyOptions());
        }

我从 StackOverflow 得到了上面这两种不同的方法。SHFILEINFO 方式奇怪地有时会System.ArgumentException: 'Arg_ArgumentException Arg_ParamName_Name'在获取文件的图标时报告错误,我必须使用另一种方式来实现它。

现在我遇到了一个问题。一开始,我将文件的每个 ImageSource 存储在一个 List 中。但是,我们知道有些目录包含许多文件和目录(例如 C:\windows\system32)。获取和存储 ImageSource 需要很长时间。(PS:我在 C:\windows\system32 中进行了测试。加载所有文件信息(不带图标)大约需要 3 秒,加载所有文件信息(带图标)大约需要 30 秒)

有这么多文件和目录有相同的图标。所以没有必要存储一个全新的 ImageSource 预文件/目录。

我无法通过文件扩展名来实现这一点。如您所知,几乎每个 .exe 都有不同的图标。

我怎样才能知道图标是否相同?谢谢你。

标签: c#

解决方案


推荐阅读