标签:name 文件信息 filename family list pen let 文件 hicon
- 可以获取系统图标列表
- 可以获取任意文件/文件夹/磁盘的图标
- 可以获取任意文件/文件夹/磁盘图标在系统图标列表中的位置
#pragma once
#include <winnt.h>
class CSHGetFileInfo
{
public:
	/// 获取系统图像列表
	/// @param[in] bSmallIcon ture则为小图标,false则为大图标
	static HIMAGELIST  GetSystemImageListHandle(BOOL bSmallIcon = TRUE);
	/// 获取系统图片列表的文件图片索引
	/// @param[in] strFileName 文件名
	/// @param[in] bSmallIcon ture则为小图标,false则为大图标
	static int GetFileIconIndex(CString strFileName, BOOL bSmallIcon = TRUE);
	/// 获取系统图片列表的文件夹图片索引
	/// @param[in] bSmallIcon
	static int GetDirIconIndex(BOOL bSmallIcon = TRUE);
	/// 获取文件的icon的句柄
	/// @param[in] diskName 磁盘名
	/// @param[in] bSmallIcon ture则为小图标,false则为大图标
	static int GetDiskIconIndex(LPCTSTR diskName, BOOL bSmallIcon = TRUE);
	/// 获取文件的icon的句柄
	/// @param[in] strFileName 文件名
	/// @param[in] bSmallIcon ture则为小图标,false则为大图标
	static HICON GetFileIconHandle(CString strFileName, BOOL bSmallIcon = TRUE);
	/// 获取文件夹的icon的句柄
	/// @param[in] bSmallIcon ture则为小图标,false则为大图标
	static HICON GetFolderIconHandle(BOOL bSmallIcon = TRUE);
	/// 获取磁盘的icon的句柄
		/// @param[in] diskName 磁盘名
	/// @param[in] bSmallIcon ture则为小图标,false则为大图标
	static HICON GetDiskIconHandle(LPCTSTR diskName, BOOL bSmallIcon = TRUE);
	/// 获取文件类型
	/// @param[in] strFileName 文件名
	static CString GetFileType(CString strFileName);
};
#include "pch.h"
#include "CSHGetFileInfo.h"
HIMAGELIST  CSHGetFileInfo::GetSystemImageListHandle(BOOL bSmallIcon)
{
	HIMAGELIST hSystemImageList;
	SHFILEINFO ssfi;
	if (bSmallIcon)
	{
		hSystemImageList = (HIMAGELIST)SHGetFileInfo( (LPCTSTR)_T("c:\\"), 0, &ssfi,
			sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
	}
	else
	{
		hSystemImageList = (HIMAGELIST)SHGetFileInfo( (LPCTSTR)_T("c:\\"), 0, &ssfi, 
			sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON);
	}
	return hSystemImageList;
}
int CSHGetFileInfo::GetFileIconIndex(CString strFileName, BOOL bSmallIcon)
{
	SHFILEINFO sfi;
	if (bSmallIcon)
	{
		SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
			sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
	}
	else
	{
		SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
			sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
	}
	return sfi.iIcon;
}
int CSHGetFileInfo::GetDirIconIndex(BOOL bSmallIcon)
{
	SHFILEINFO sfi;
	if (bSmallIcon)
	{
		SHGetFileInfo( (LPCTSTR)_T("Doesn‘t matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
			sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
	}
	else
	{
		SHGetFileInfo( (LPCTSTR)_T("Doesn‘t matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
			sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
	}
	return sfi.iIcon;
}
int CSHGetFileInfo::GetDiskIconIndex(LPCTSTR diskName, BOOL bSmallIcon)
{
	SHFILEINFO sfi;
	DWORD attr = ::GetFileAttributes(diskName);
	if (bSmallIcon)
	{
		::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
			SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
	}
	else
	{
		::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
			SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
	}
	return sfi.iIcon;
}
HICON CSHGetFileInfo::GetFileIconHandle(CString strFileName, BOOL bSmallIcon)
{
	SHFILEINFO sfi;
	if (bSmallIcon)
	{
		SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
			sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
	}
	else
	{
		SHGetFileInfo( (LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi,
			sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
	}
	return sfi.hIcon;
}
HICON CSHGetFileInfo::GetFolderIconHandle(BOOL bSmallIcon)
{
	SHFILEINFO sfi;
	if (bSmallIcon)
	{
		SHGetFileInfo( (LPCTSTR)_T("Doesn‘t matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
			sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES);
	}
	else
	{
		SHGetFileInfo( (LPCTSTR)_T("Doesn‘t matter"), FILE_ATTRIBUTE_DIRECTORY, &sfi,
			sizeof(SHFILEINFO), SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES);
	}
	return sfi.hIcon;
}
HICON CSHGetFileInfo::GetDiskIconHandle(LPCTSTR diskName, BOOL bSmallIcon)
{
	SHFILEINFO sfi;
	DWORD attr = ::GetFileAttributes(diskName);
	if (bSmallIcon)
	{
		::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
			SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
	}
	else
	{
		::SHGetFileInfo(diskName, attr, &sfi, sizeof(sfi),
			SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES); //获取文件信息
	}
	return sfi.hIcon;
}
CString CSHGetFileInfo::GetFileType(CString strFileName)
{
	SHFILEINFO sfi;
	SHGetFileInfo((LPCTSTR)strFileName, FILE_ATTRIBUTE_NORMAL, &sfi, 
		sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES);
	return sfi.szTypeName;
}
标签:name 文件信息 filename family list pen let 文件 hicon
原文地址:https://www.cnblogs.com/veis/p/12962190.html