public int IconIndex(string fileName, bool forceLoadFromDisk, ShellIconStateConstants iconState)
{
SysImageList.SHGetFileInfoConstants sHGetFileInfoConstants = SysImageList.SHGetFileInfoConstants.SHGFI_SYSICONINDEX;
if (this.size == SysImageListSize.smallIcons)
{
sHGetFileInfoConstants |= SysImageList.SHGetFileInfoConstants.SHGFI_SMALLICON;
}
int dwFileAttributes;
if (!forceLoadFromDisk)
{
sHGetFileInfoConstants |= SysImageList.SHGetFileInfoConstants.SHGFI_USEFILEATTRIBUTES;
dwFileAttributes = 128;
}
else
{
dwFileAttributes = 0;
}
SysImageList.SHFILEINFO sHFILEINFO = default(SysImageList.SHFILEINFO);
uint cbFileInfo = (uint)Marshal.SizeOf(sHFILEINFO.GetType());
IntPtr intPtr = SysImageList.SHGetFileInfo(fileName, dwFileAttributes, ref sHFILEINFO, cbFileInfo, (uint)(sHGetFileInfoConstants | (SysImageList.SHGetFileInfoConstants)iconState));
int result;
if (intPtr.Equals(IntPtr.Zero))
{
Debug.Assert(!intPtr.Equals(IntPtr.Zero), "Failed to get icon index");
result = 0;
}
else
{
result = sHFILEINFO.iIcon;
}
return(result);
}