3

如果我有一个包含 16x16、32x32、256x256 等版本图标的 Vista .ico 文件,我可以通过简单地执行以下操作成功地将其加载为 .NET 图标:

Icon myIcon = new Icon("C:\\MyIcon.ico");

然后我可以访问图标中所有不同大小的图像。我什至可以使用此处详述的方法访问 256x256 Vista PNG 。

但是,我还没有找到从 Vista 可执行文件中获取全套图标图像的方法。不幸的是,这样做-:

Icon myIcon = Icon.ExtractAssociatedIcon("C:\\MyExe.exe");

...仅会导致提取单个 32x32 图像。有没有办法从可执行文件中获取整组图像作为 .NET 图标?最好是也可以在 XP 中使用的。

4

2 回答 2

3

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

希望这可以帮助。

于 2010-01-31T23:16:39.297 回答
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]);
于 2012-12-20T10:57:31.090 回答