• Windows系统SHELL图标获取的功能类分享


    1.用途

    - 可以获取系统图标列表

    - 可以获取任意文件/文件夹/磁盘的图标

    - 可以获取任意文件/文件夹/磁盘图标在系统图标列表中的位置

    2.头文件

    #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);
    
    };
    

      

    3.源文件

    #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;
    }
    

      

  • 相关阅读:
    SpringBoot+SpringCloud+vue+Element开发项目——集成Druid数据源
    SpringBoot+SpringCloud+vue+Element开发项目——集成MyBatis框架
    c语言double类型数据四舍五入
    陀螺仪、加速计、磁力计等传感器汇总 (转)
    sudo和man的tab自动补全
    linux系统资源网站
    gstreamer
    version `GLIBC_2.14' not found 解决方法.
    项目框架设计模式(转)
    Linux音频编程指南(转)
  • 原文地址:https://www.cnblogs.com/veis/p/12962190.html
Copyright © 2020-2023  润新知