private static uint GetFileInfoRequestFlags(Win32.ItemState itemState, Win32.IconSize iconSize, Win32.FileAttribute attributes) { var flags = (uint)(Win32.ShellAttribute.Icon | Win32.ShellAttribute.UseFileAttributes); if (attributes == Win32.FileAttribute.Directory && itemState == Win32.ItemState.Open) { flags |= (uint)Win32.ShellAttribute.OpenIcon; } flags |= iconSize == Win32.IconSize.Small ? (uint)Win32.ShellAttribute.SmallIcon : (uint)Win32.ShellAttribute.LargeIcon; return(flags); }
public static ImageSource GetImageSource(string fileSystemItemPath, Win32.ItemState itemState = Win32.ItemState.Undefined, Win32.IconSize iconSize = Win32.IconSize.Small) { using var fileIcon = GetIcon(fileSystemItemPath, itemState, iconSize); return(IconToImageSource(fileIcon) ?? IconToImageSource(EmptyIcon())); }
public static Icon GetIcon(string fileSystemItemPath, Win32.ItemState itemState = Win32.ItemState.Undefined, Win32.IconSize iconSize = Win32.IconSize.Small) { try { var attributes = GetFileInfoRequestAttributes(fileSystemItemPath); var flags = GetFileInfoRequestFlags(itemState, iconSize, attributes); var fileInfo = new Win32.ShellFileInfo(); var size = (uint)Marshal.SizeOf(fileInfo); var result = Win32.SHGetFileInfo(fileSystemItemPath, (uint)attributes, out fileInfo, size, flags); return(result.IsValidHandle() ? GetIconFromHandle(fileInfo.hIcon) : EmptyIcon()); } catch { return(EmptyIcon()); } }