Извлечь иконку из системной библиотеки [Решено]
Цитата: MLGretard от 06.06.2021, 09:28Всем привет!
Изучаю расширения файлов и хочу получить иконку из подраздела defaulticon и вывести ее на форму. Проблема в том, что у большинства расширений параметр ссылается на иконку в системной библиотеке и выглядит ,например, так %SystemRoot%\System32\fontext.dll,-419. Я только изучаю c# и не понимаю как это сделать, а все решения, что я находил, предлагают сторонние API.
Всем привет!
Изучаю расширения файлов и хочу получить иконку из подраздела defaulticon и вывести ее на форму. Проблема в том, что у большинства расширений параметр ссылается на иконку в системной библиотеке и выглядит ,например, так %SystemRoot%\System32\fontext.dll,-419. Я только изучаю c# и не понимаю как это сделать, а все решения, что я находил, предлагают сторонние API.
Цитата: XpucT от 07.06.2021, 04:58Привет 🖐
[spoiler title="Создаёшь атрибут импорта 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);[/spoiler]
[spoiler title="Создаёшь метод извлечения иконки из любой 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; } }[/spoiler]
[spoiler title="Устанавливаешь иконку (Icon) в качестве картинки (Image) вот так:"]pictureBox1.Image = Extract(@"C:\Windows\System32\imageres.dll", 225, true).ToBitmap();[/spoiler]
Привет 🖐
[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);
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;
}
}
pictureBox1.Image = Extract(@"C:\Windows\System32\imageres.dll", 225, true).ToBitmap();
Цитата: MLGretard от 07.06.2021, 04:59Самый простой способ создать файл с нужным расширением из извлечь из него иконку
Самый простой способ создать файл с нужным расширением из извлечь из него иконку