Cleaned and reorganized

pull/180/head
dahall 2020-11-04 10:03:14 -07:00
parent 79e2b179e1
commit b71a3723b8
1 changed files with 26 additions and 18 deletions

View File

@ -7,18 +7,23 @@ using static Vanara.PInvoke.User32;
namespace Vanara.Windows.Shell
{
/// <summary>Used to determine the size of the icon returned by <see cref="ShellImageList.GetSystemIcon"/>.</summary>
/// <summary>Used to determine the size of the icon returned by <c>ShellImageList.GetSystemIcon</c>.</summary>
public enum ShellImageSize
{
/// <summary>
/// The image size is normally 32x32 pixels. However, if the Use large icons option is selected from the Effects section of the Appearance tab in
/// Display Properties, the image is 48x48 pixels.
/// The image size is normally 32x32 pixels. However, if the Use large icons option is selected from the Effects section of the
/// Appearance tab in Display Properties, the image is 48x48 pixels.
/// </summary>
Large = SHIL.SHIL_LARGE,
/// <summary>The image is the Shell standard small icon size of 16x16, but the size can be customized by the user.</summary>
Small = SHIL.SHIL_SMALL,
/// <summary>The image is the Shell standard extra-large icon size. This is typically 48x48, but the size can be customized by the user.</summary>
/// <summary>
/// The image is the Shell standard extra-large icon size. This is typically 48x48, but the size can be customized by the user.
/// </summary>
ExtraLarge = SHIL.SHIL_EXTRALARGE,
/// <summary>Windows Vista and later. The image is normally 256x256 pixels.</summary>
Jumbo = SHIL.SHIL_JUMBO
}
@ -31,6 +36,22 @@ namespace Vanara.Windows.Shell
{
private static HIMAGELIST hSystemImageList;
/// <summary>Gets the Shell icon for the given file name or extension.</summary>
/// <param name="fileNameOrExtension">The file name or extension .</param>
/// <param name="iconType">
/// Flags to specify the type of the icon to retrieve. This uses the <see cref="SHGetFileInfo(string, System.IO.FileAttributes, ref
/// SHFILEINFO, int, SHGFI)"/> method and can only retrieve small or large icons.
/// </param>
/// <returns>An <see cref="Icon"/> instance if found; otherwise <see langword="null"/>.</returns>
public static Icon GetFileIcon(string fileNameOrExtension, ShellIconType iconType = ShellIconType.Large)
{
var shfi = new SHFILEINFO();
var ret = SHGetFileInfo(fileNameOrExtension, 0, ref shfi, SHFILEINFO.Size, SHGFI.SHGFI_USEFILEATTRIBUTES | SHGFI.SHGFI_ICON | (SHGFI)iconType);
if (ret == IntPtr.Zero)
ret = SHGetFileInfo(fileNameOrExtension, 0, ref shfi, SHFILEINFO.Size, SHGFI.SHGFI_ICON | (SHGFI)iconType);
return ret == IntPtr.Zero ? null : shfi.hIcon.ToIcon();
}
/// <summary>Gets the system icon for the given file name or extension.</summary>
/// <param name="fileNameOrExtension">The file name or extension.</param>
/// <param name="iconSize">Size of the icon.</param>
@ -55,18 +76,5 @@ namespace Vanara.Windows.Shell
SHGetImageList((SHIL)iconSize, typeof(IImageList).GUID, out var il).ThrowIfFailed();
return il.GetIcon(index, IMAGELISTDRAWFLAGS.ILD_TRANSPARENT)?.ToIcon();
}
/// <summary>Gets the Shell icon for the given file name or extension.</summary>
/// <param name="fileNameOrExtension">The file name or extension .</param>
/// <param name="iconType">Flags to specify the type of the icon to retrieve. This uses the <see cref="SHGetFileInfo(string, System.IO.FileAttributes, ref SHFILEINFO, int, SHGFI)"/> method and can only retrieve small or large icons.</param>
/// <returns>An <see cref="Icon"/> instance if found; otherwise <see langword="null"/>.</returns>
public static Icon GetFileIcon(string fileNameOrExtension, ShellIconType iconType = ShellIconType.Large)
{
var shfi = new SHFILEINFO();
var ret = SHGetFileInfo(fileNameOrExtension, 0, ref shfi, SHFILEINFO.Size, SHGFI.SHGFI_USEFILEATTRIBUTES | SHGFI.SHGFI_ICON | (SHGFI)iconType);
if (ret == IntPtr.Zero)
ret = SHGetFileInfo(fileNameOrExtension, 0, ref shfi, SHFILEINFO.Size, SHGFI.SHGFI_ICON | (SHGFI)iconType);
return ret == IntPtr.Zero ? null : shfi.hIcon.ToIcon();
}
}
}
}