【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo

深入掌握如何获取Windows文件系统图标 本文还有配套的精品资源,点击获取 简介:在Windows操作系统中,文件系统图标用于图形化表示文件、文件夹或驱动器。这些图标可以动态加载并在用户界面元素如资源管理器、桌面快捷方式中显示。文章将探讨如何编程获取这些图标,特别通过动态加载系统文件目录并获取系统文件夹图标的方法。介绍关键的Windows API函数如SHGetFileInfo、SHFILEINFO、LoadIco... 阅读详情

工作后比较忙,没大块的时间来酝酿博客的写作,所以随时记点笔记,一来方便自己查阅,二来也督促自己学习和总结。如果能对大家有所帮助,就更加开心了大笑。

 

 SHGetFileInfo是一个相当实用的Windows API函数。在Windows资源管理器中就要使用它。如图中的第3列显示的就是文件的类型名称

下面来看看这个函数的详细用法:

// 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
  printf("   【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo\n");    
  printf(" - http://blog.youkuaiyun.com/morewindows/article/details/16358681 -\n");    
  printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n");  

  CoInitialize(NULL);
  char file_name[] = "C:\\MoreWindows.mp3";
  SHFILEINFO sfi = {0};
  
  cout<<"file name = "<<file_name<<endl;

  // type name
  SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME);
  cout<<"type name = "<<sfi.szTypeName<<endl;

  // display name
  SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME);
  cout<<"display name = "<<sfi.szDisplayName<<endl;

  // attribute
  SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ATTRIBUTES);
  cout<<"attribute = "<<hex<<sfi.dwAttributes<<endl;  // 使用IShellFolder::GetAttributesOf函数解析
  
  // HICON
  // 除了SHGFI_ICON之外还有SHGFI_LARGEICON(大图标), SHGFI_SMALLICON(小图标)
  SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON);
  cout<<"HICON = 0x"<<hex<<sfi.hIcon<<endl;  // 使用IShellFolder::GetAttributesOf函数解析
  DestroyIcon(sfi.hIcon);

  // HICON system index
  SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);
  cout<<"HICON system index = "<<sfi.iIcon<<endl;  // 使用IShellFolder::GetAttributesOf函数解析

  CoUninitialize();

  // SHGFI_USEFILEATTRIBUTES 的说明
  // Indicates that the function should not attempt to access the file specified by pszPath. 
  // Rather, it should act as if the file specified by pszPath exists with the file attributes passed in dwFileAttributes.
  // This flag cannot be combined with the SHGFI_ATTRIBUTES, SHGFI_EXETYPE, or SHGFI_PIDL flags.
  return 0;
}

运行结果如图所示:

.mp3文件:

.txt文件

.docx文件

 

 

地址:http://blog.youkuaiyun.com/morewindows/article/details/16358681 转载请标明出处,谢谢。

欢迎关注微博:http://weibo.com/MoreWindows  

 


 

比亚迪唐/秦开发者必看:253个车辆接口实战指南(附常用功能调用示例) 本文为比亚迪唐/秦开发者提供了一份详尽的车辆接口实战指南。文章聚焦于比亚迪开放的253个车辆接口,从开发环境搭建、核心状态监控到高频控制功能(如空调与充电管理),结合真实代码示例,帮助开发者快速上手并规避常见问题,高效开发车载应用。 阅读详情

相关推荐

手把手教你为智能手表DIY一个离线导航:LVGL + SD卡地图实战

本文详细介绍了如何为智能手表DIY一个离线导航系统,结合LVGL图形库和SD卡地图数据。从硬件选型、地图数据处理到LVGL地图引擎实现,提供了完整的实战指南,特别适合户外运动爱好者和嵌入式开发者。文章还分享了功耗优化、性能提升等实用技巧,帮助读者打造高效的离线导航解决方案。

weixin_42570484的博客 206

用SHGetFileInfo函数获取文件信息

SHGetFileInfo函数 WINSHELLAPI DWORD WINAPI SHGetFileInfo( LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO FAR *psfi, UINT cbFileInfo, UINT uFlags ); SHGetFileInfo的定义 MSDN上的定义是: Retrieves information about an object in th...

甜筒八部 的专栏 1801

【王道训练营 C/C++方向基础 60 题(31-40)】

王道训练营 C/C++方向基础 60 题(31-40)

qq_55805517的博客 3067

Windows Shell 编程 第四章

 http://blog.youkuaiyun.com/Comman1999/archive/2008/07/03/2608967.aspx以前,所有文件和目录都有一个确定的属性集:时间,日期,尺寸,以及表示‘只读的’,‘隐藏的,‘存档的’,或‘系统的’状态标志。然而,Windos95(及后来的WindowsNT4.0)出现使这些概念产生了改变,其中最重要的‘文件’变得更加广泛。现在,文件可以

1162

麒麟操作系统安装达梦数据库ARM版

Linux安装达梦数据库ARM版

运维@小兵的博客 8769

手把手教你学Simulink--基于微电网的建模与仿真场景实例:独立运行模式下微电网的能量管理系统设计

本文详细介绍了使用Simulink对独立运行微电网能量管理系统进行建模与仿真的完整流程。主要包括:系统结构设计(分布式能源、储能系统、负荷等模块)、建模步骤(从创建项目到实现能量管理策略)、仿真设置与结果分析。通过建立基于规则的控制逻辑和优化调度算法,实现微电网的自主运行和能量优化管理。文章还提供了参数优化和多目标改进建议,为新能源和智能电网领域的研究与应用提供了实用指导。

MHD0815的博客 8582

SHGetFileInfo函数

SHGetFileInfo Function Retrieves information about an object in the file system, such as a file, folder, directory, or drive root. 获得一个文件系统对象的信息,如一个文件、文件夹、目录或者根驱动器等的信息 语法(Syntax) DWORD_PTR SHGet

JohnnyHu90的专栏 1577

STM32(HAL库)驱动st7789LCD屏幕(7引脚240*240)

屏幕厂家提供的都是标准库,网上找了找没看到好用的HAL库屏幕驱动,因此本文对HAL库驱动TFT屏幕进行详细讲解。

weixin_44597885的博客 6060

文件的本质--SHGetFileInfo()

本文从一下几个方法进行介绍:  SHGetFileInfo的定义 SHGetFileInfo()函数的工作原理 SHGetFileInfo()函数的返回值 SHGetFileInfo()函数的简单示例  SHGetFileInfo的定义        SHGetFileInfo在MSDN上的定义是: Retrieves information about an object

IT民工 4923

从DDPM到DDIM:深入解读《Denoising Diffusion Implicit Models》

DDIM发表在ICRL2021上,是DDPM重要的改进之一,能显著提高DDPM的样本质量、减少采样时间,并且能显式控制插值,已经被广泛应用到现在的Diffusion Models上。这篇博客和大家一起详细解读一下DDIM,认识这一伟大的模型。.........

沉迷单车的追风少年 1万+

PCL RANSAC拟合分割多条直线【2026最新版】

使用RANSAC算法拟合分割多条直线,输出每一条直线的拟合参数到控制台,并保存直线点云到本地文件夹。博客长期更新,本文最新更新时间为:2026年5月24日。

点云侠的博客 7974

使用SHGetFileInfo函数获取任何文件大图标

为了实现在vista和更高版本的系统中能够获取任何文件的大图标(48*48像素,甚至256*256像素),真是找了很多资料,最终经过朋友的帮忙找到了实现方法。    网络中有很多获取exe大图标的方法,可惜不能获取所有文件的,有使用ExtractIcon函数也有介绍使用注册表实现的,经过仔细测试,最终采用SHGetFileInfo函数。SHGetFileInfo的使用方法网上资料很多,但是真正能

yueyun889的专栏 4880

基于Simulink的四足机器人关节力矩优化仿真建模示例

高自由度:每个腿至少有3个自由度(DOF),增加了控制的复杂性。非线性动力学:涉及多体系统的相互作用,包括接触力、摩擦力等。能量消耗:减少不必要的能量消耗是提升续航能力和效率的关键。可以是最小化能量消耗或最大化稳定性等。matlab深色版本% 示例代码通过本指南,我们介绍了如何基于Simulink搭建一个四足机器人的关节力矩优化模型,并进行了仿真以验证其基本功能。

amy_mhd的博客 171

【MoreWindows工作笔记4】 获取文件图标 类型名称 属性 SHGetFileInfo

【MoreWindows工作笔记4】 获取文件图标 类型名称 属性 SHGetFileInfo

weixin_43417960的博客 307

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SHGetFileInfo()获取系统图标方法

头文件 /// @class CSHGetFileInfo /// SHGetFileInfo的包裹类 class CSHGetFileInfo { public: CSHGetFileInfo(); virtual ~CSHGetFileInfo(); /// 获取系统图像列表 /// @param[in] bSmallIcon ture则为小图标,false则为大图标 HIMAGELIST ...

qq_42840244的博客 3210

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SHGetFileInfo函数详解

SHGetFileInfo函数function SHGetFileInfo(pszPath: PAnsiChar; dwFileAttributes: DWORD;  var psfi: TSHFileInfo; cbFileInfo, uFlags: UINT): DWORD; stdcall;pszPath 参数:指定的文件名。 当uFlags的取值中不包含 SHGFI_PIDL时,可直接

狂疯庵Blog 1940

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

使用C++获取系统文件的图标 CSHGetFileInfo类

整理网上的资源 .h #pragma once class CSHGetFileInfo { public: /// 获取系统图像列表 /// @param[in] bSmallIcon ture则为小图标,false则为大图标 static HIMAGELIST GetSystemImageListHandle( BOOL bSmallIcon = TRUE); /// 获取系...

qq_42972267的博客 1027

WINDOWS API——SHGETFILEINFO——获取文件信息

SHGetFileInfo的定义 SHGetFileInfo()函数的工作原理 SHGetFileInfo()函数的返回值 SHGetFileInfo的定义 SHGetFileInfo在MSDN上的定义是: Retrieves information about an object in the file system, such as a file, folder, direct...

qq_36633275的博客 1007

根据可执行文件名,获得这个文件的图标

根据可执行文件名,获得这个文件的图标  SHFILEINFO shFileInfo = {0};  ::SHGetFileInfo(szProcessPath,0,&shFileInfo,sizeof(SHFILEINFO),SHGFI_ICON);  shFileInfo.hIcon保存的,就是这个可执行文件的图标句柄,可以直接拿来用  比如调用CImageList的成员函数int CImage

Tommy(凌飞)的专栏 905

获取系统文件图标

在做ftp客户端的时候我们常希望我们的ListView会象资源管理器一样工作.对不同类型的文件显示不同的图标.为此我们就需要获取系统的图标:SHGetFileInfo这个API为我们提供了获取系统图标的方法.我这里把我以前写的一段程序弄上来省得要用的时候还得写了:using System;using System.Collections.Generic;using System.Text;

angelbear的专栏 3084

SHGetFileInfo(获取文件信息)

可以获取文件系统中的文件、目录、驱动器的信息。 语法: WINSHELLAPI DWORD WINAPI SHGetFileInfo( LPCTSTR pszPath, DWORD dwFileAttributes, SHFILEINFO FAR* psfi, UINT cbFileInfo, UINT uFlags ); 参数: [in]

易元——美好吧 2283

SHGetFileInfo

SHGetFileInfo用于获取文件,文件夹,或者磁盘的信息 用法:  SHFILEINFO info = {0};  SHGetFileInfo("D:\\book",0,&info,sizeof(info),SHGFI_TYPENAME|SHGFI_DISPLAYNAME|SHGFI_ICON);   SHGFI_TYPENAME 获取类型信息,比如 文件夹   S

最爱吹吹风 1691

在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)

如果没有,你就获得到一个难看的黑色边框。第一,它分割了文件的路径以得到文件的扩展名(扩展名是“.”后面的那部分,也是数组的最大位置上的字符串)。一旦我拥有了一个用来取得文件图标的必要API函数,我就建立另一个类型来管理大小图象列表,这能使我能够通过一个单独的调用来添加图标,如果它已经被加进来了,就返回这个图标在ImageList里的索引。不过作者提供的类还是不能满足我的所有需要,那就是不能获得软驱跟光驱的图标,然后特别纳闷的是我最先用的MSDN的代码可以得到这些图标,然后我比较了半天都没看出什么名堂来。

biyusr的专栏 1122
上一篇: 【MoreWindows工作笔记3】 使用cout/pintf输出16进制,8进制,2进制数据
下一篇: 【优快云博客之星】成功连任2013年优快云年度博客之星,非常感谢大家的支持!祝大家新春快乐!
MoreWindows
MoreWindows 《白话经典算法》、《秒杀多线程》作者 《白话经典算法》、《秒杀多线程》作者 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄15年 2万+粉丝 157原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值