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

      

  • 相关阅读:
    Swift
    Swift
    Swift
    Mac
    Mac
    Sqlite数据库 找不到请求的 .Net Framework Data Provider。可能没有安装
    Couchbase的web管理员后台 查看缓存提示警告 Warning: Editing of document with size more than 2.5kb is not allowed的解决方法
    转:asmx迷10分钟升级成wcf熟手指南
    .net4.0下 解决asp.net中“从客户端中检测到有潜在危险的Request.Form值”的错误
    Windows系统下Memcached缓存系列二:CouchbaseClient(c#客户端)的详细试用,单例模式
  • 原文地址:https://www.cnblogs.com/veis/p/12962190.html
Copyright © 2011-2022 走看看