// shell32.dll version 5.0 or later
static BOOL Emulate_Shell_GetImageLists(HIMAGELIST* phiml, HIMAGELIST* phimlSmall)
{
if (phiml != NULL)
{
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_LARGEICON;
*phiml = (HIMAGELIST)::SHGetFileInfo(_T("c:\\"), 0, &info, sizeof(info), uFlags);
}
if (phimlSmall != NULL)
{
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_SMALLICON;
*phimlSmall = (HIMAGELIST)::SHGetFileInfo(_T("c:\\"), 0, &info, sizeof(info), uFlags);
}
return TRUE;
}
static HIMAGELIST GetSysIconImageList(BOOL bLargeIcons = FALSE)
{
DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | dwIconSize;
return (HIMAGELIST)::SHGetFileInfo(_T("c:\\"), 0, &info, sizeof(info), uFlags);
}
static int GetSysIconIndex(LPCTSTR szFileName, BOOL bLargeIcons = FALSE)
{
DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_LINKOVERLAY | dwIconSize;
DWORD_PTR dwResult = ::SHGetFileInfo(szFileName, 0, &info, sizeof(info), uFlags);
if (dwResult == 0)
{
return -1;
}
return info.iIcon;
}
static int GetSysIconIndex(LPCITEMIDLIST pidl, BOOL bLargeIcons = FALSE)
{
DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_LINKOVERLAY | SHGFI_PIDL | dwIconSize;
DWORD_PTR dwResult = ::SHGetFileInfo((LPCTSTR)pidl, 0, &info, sizeof(info), uFlags);
if (dwResult == 0)
{
return -1;
}
return info.iIcon;
}
static int GetSysOpenIconIndex(LPCTSTR szFileName, BOOL bLargeIcons = FALSE, BOOL bPIDL = FALSE)
{
DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
DWORD dwPIDL = bPIDL ? SHGFI_PIDL : 0;
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_OPENICON | dwIconSize | dwPIDL;
DWORD_PTR dwResult = ::SHGetFileInfo(szFileName, 0, &info, sizeof(info), uFlags);
if (dwResult == 0)
{
return -1;
}
return info.iIcon;
}
static int GetSysOpenIconIndex(LPCITEMIDLIST pidl, BOOL bLargeIcons = FALSE)
{
DWORD dwIconSize = bLargeIcons ? SHGFI_LARGEICON : SHGFI_SMALLICON;
CSHFileInfo info;
UINT uFlags = SHGFI_SYSICONINDEX | SHGFI_OPENICON | SHGFI_PIDL | dwIconSize;
DWORD_PTR dwResult = ::SHGetFileInfo((LPCTSTR)pidl, 0, &info, sizeof(info), uFlags);
if (dwResult == 0)
{
return -1;
}
return info.iIcon;
}