zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    hbase权威指南PDF下载
    流畅的pythonPDF下载
    现代操作系统PDF下载
    Kafka权威指南PDF下载
    java核心技术卷1PDF下载
    计算机网络自顶向下方法PDF下载
    git gitlab 部署
    MySQL 索引、事务与存储引擎(详细解读)
    QT: Layout布局间消除间隙(修改layout内置参数)
    数据结构---归并排序
  • 原文地址:https://www.cnblogs.com/veis/p/12962190.html
Copyright © 2011-2022 走看看