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

      

  • 相关阅读:
    【学习】CodeUi
    【C#】权限修饰符
    链表_初步认识
    关于mysql8.0及以上版本连接navicat时候报错(密码加密方式需要修改)
    docker 运行mysql最新版本用navicat连接报错:1251
    spring5的基本组成(6个模块)
    关于java中设计原则总结(7)
    java中String中的endsWith()方法
    mysql中基本的语句
    mysql中索引类型
  • 原文地址:https://www.cnblogs.com/veis/p/12962190.html
Copyright © 2011-2022 走看看