public virtual ImageSource SelectIconSource(IFileSystemItemModel itemModel, bool isDirectory, string fileSystemItemFullName) { FileAttributeConstants iconType = System.IO.File.Exists(fileSystemItemFullName) ? FileAttributeConstants.FILE_ATTRIBUTE_NORMAL : System.IO.Directory.Exists(fileSystemItemFullName) ? FileAttributeConstants.FILE_ATTRIBUTE_DIRECTORY : FileAttributeConstants.DEFAULT; if (iconType == FileAttributeConstants.DEFAULT || itemModel is SpecialDirectory) { return(null); } return(GetFileSystemItemIcon(fileSystemItemFullName, true, iconType)); }
private static ImageSource GetFileSystemItemIcon(string filePath, bool isSmall, FileAttributeConstants iconType) { SHFILEINFO info = new SHFILEINFO(true); int cbFileInfo = Marshal.SizeOf(info); SHGFI flags; if (isSmall) { flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes; } else { flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes; } SHGetFileInfo(filePath, (uint)iconType, ref info, (uint)cbFileInfo, flags); using var defaultAssociatedIconWinFormsIcon = Icon.FromHandle(info.hIcon); return(ConvertIconToImageSource(defaultAssociatedIconWinFormsIcon)); }