如何从Vista / 7可执行文件中提取完整图标?

时间:2010-01-31 22:55:51

标签: c# .net icons windows-vista extraction

如果我有一个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。

2 个答案:

答案 0 :(得分:3)

在CodeProject上查看这篇文章“IconLib”。另外,通过VB.NET中的pinvoke使用'ExtractIconExA'API查看此version

希望这有帮助。

答案 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]);