Вы должны войти, чтобы создавать сообщения и темы.

Извлечь иконку из системной библиотеки [Решено]

Всем привет!
Изучаю расширения файлов и хочу получить иконку из подраздела defaulticon и вывести ее на форму. Проблема в том, что у большинства расширений параметр ссылается на иконку в системной библиотеке и выглядит ,например, так %SystemRoot%\System32\fontext.dll,-419. Я только изучаю c#  и не понимаю как это сделать, а все решения, что я находил, предлагают сторонние API.

Привет 🖐

Создаёшь атрибут импорта Shell32.dll и метод извлечения иконки на уровне полей:

[DllImport("Shell32.dll", EntryPoint = "ExtractIconExW", CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern int ExtractIconEx(string sFile, int iIndex, out IntPtr piLargeVersion, out IntPtr piSmallVersion, int amountIcons);


Создаёшь метод извлечения иконки из любой dll вот так:

public static Icon Extract(string file, int number, bool largeIcon)
{
    IntPtr large;
    IntPtr small;
    ExtractIconEx(file, number, out large, out small, 1);
    try
    {
        return Icon.FromHandle(largeIcon ? large : small);
    }
    catch
    {
        return null;
    }
}


Устанавливаешь иконку (Icon) в качестве картинки (Image) вот так:

pictureBox1.Image = Extract(@"C:\Windows\System32\imageres.dll", 225, true).ToBitmap();

Лайкнули Dapofig, Вася и MLGretard
DapofigВасяMLGretard
В любой непонятной ситуации переходи на beta  © Win 10 Tweaker

Самый простой способ создать файл с нужным расширением из извлечь из него иконку