如果我有一个Vista .ico文件,其中包含一个16x16,32x32,256x256等版本的图标,我可以通过简单地将其作为.NET图标加载 - :
Icon myIcon = new Icon("C:\\MyIcon.ico");
然后我可以访问图标中的所有各种大小的图像。我甚至可以使用详细HERE的方法访问256x256 Vista PNG。
但是,我还没有找到从Vista可执行文件中获取全套图标图像的方法。不幸的是,这样做 - :
Icon myIcon = Icon.ExtractAssociatedIcon("C:\\MyExe.exe");
...仅导致提取单个32x32图像。有没有办法从可执行文件中获取整个图像集作为.NET图标?最好也适用于XP。
答案 0 :(得分:3)
答案 1 :(得分:1)
使用PrivateExtractIcons API尝试此代码段:
[DllImport("User32.dll", CharSet = CharSet.Auto)]
internal static extern UInt32 PrivateExtractIcons(String lpszFile, int nIconIndex, int cxIcon, int cyIcon, IntPtr[] phicon, IntPtr[] piconid, UInt32 nIcons, UInt32 flags);
IntPtr[] phicon = new IntPtr[] { IntPtr.Zero };
IntPtr[] piconid = new IntPtr[] { IntPtr.Zero };
PrivateExtractIcons(path, 0, cx, cy, phicon, piconid, 1, 0);
if (phicon[0] != IntPtr.Zero)
return System.Drawing.Icon.FromHandle(phicon[0]);