using Pilz.Win32.Mapped;
using Pilz.Win32.Native;
using System.Runtime.InteropServices;
namespace Pilz.Win32.Internals;
public class IconExtractor
{
///
/// Extrahiert das Icon aus einer Datei oder aus einem Ordner.
///
/// Hier übergeben Sie den Pfad der Datei von dem das Icon extrahiert werden soll.
/// Bei übergabe von true wird ein kleines und bei false ein großes Icon zurück gegeben.
public static Icon ExtractIcon(string FilePath, SystemIconSize size)
{
Icon icon;
var shinfo = new SHFILEINFO();
var small = size == SystemIconSize.Small;
Shell32.SHGetFileInfo(FilePath, 0U, ref shinfo, (uint)Math.Round(Math.Truncate((decimal)Marshal.SizeOf(shinfo))), SHFILEINFO.SHGFI_ICON | (small ? SHFILEINFO.SHGFI_SMALLICON : SHFILEINFO.SHGFI_LARGEICON));
try
{
icon = Icon.FromHandle(shinfo.hIcon);
}
catch (Exception ex)
{
icon = null;
}
return icon;
}
}