Как извлечь полный значок из исполняемого файла Vista / 7? - PullRequest
3 голосов
/ 01 февраля 2010

Если у меня есть файл Vista .ico, который содержит версию значка 16x16, 32x32, 256x256 и т. Д., Я могу успешно загрузить его как значок .NET, просто выполнив -:

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

После этого я могу получить доступ ко всем изображениям различного размера на значке. Я даже могу получить доступ к 256x256 Vista PNG, используя методы, подробно описанные ЗДЕСЬ .

Однако я не нашел способа получить полный набор изображений значков из исполняемого файла Vista. К сожалению, занимаюсь этим -:

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

... приводит к извлечению только одного изображения 32x32. Есть ли способ получить весь набор изображений из исполняемого файла в виде значка .NET? Желательно тот, который также работает в XP.

Ответы [ 2 ]

3 голосов
/ 01 февраля 2010

Взгляните на эту статью ' IconLib ' на CodeProject. Кроме того, посмотрите на эту версию с помощью API «ExtractIconExA» через pinvoke в VB.NET.

Надеюсь, это поможет.

1 голос
/ 20 декабря 2012

попробуйте этот фрагмент с API PrivateExtractIcons:

[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]);
...