SHGetFileInfo函数:

WINSHELLAPI DWORD WINAPI SHGetFileInfo(LPCTSTR pszPath,DWORD dwFileAttributes,SHFILEINFO FAR *psfi,UINT cbFileInfo,UINT uFlags
);

pszPath 参数:指定的文件名。
 当uFlags的取值中不包含 SHGFI_PIDL时,可直接指定;
 当uFlags的取值中包含 SHGFI_PIDL时pszPath要通过计算获得,不能直接指定;

dwFileAttributes参数:文件属性。
 仅当uFlags的取值中包含SHGFI_USEFILEATTRIBUTES时有效,一般不用此参数;

psfi 参数:返回获得的文件信息,是一个记录类型,有以下字段:
  _SHFILEINFOA = record
    hIcon: HICON;                      { out: icon }  //文件的图标句柄
    iIcon: Integer;                    { out: icon index }     //图标的系统索引号
    dwAttributes: DWORD;               { out: SFGAO_ flags }    //文件的属性值
    szDisplayName: array [0..MAX_PATH-1] of  AnsiChar; { out: display name (or path) }  //文件的显示名
    szTypeName: array [0..79] of AnsiChar;             { out: type name }      //文件的类型名
  end;

cbFileInfo 参数:psfi的比特值;

uFlags 参数:指明需要返回的文件信息标识符,常用的有以下常数:
    SHGFI_ICON;           //获得图标
    SHGFI_DISPLAYNAME;    //获得显示名
    SHGFI_TYPENAME;       //获得类型名
    SHGFI_ATTRIBUTES;     //获得属性
    SHGFI_LARGEICON;      //获得大图标
    SHGFI_SMALLICON;      //获得小图标
    SHGFI_PIDL;           // pszPath是一个标识符
函数SHGetFileInfo()的返回值也随uFlags的取值变化而有所不同。

 

可见通过调用SHGetFileInfo()可以由psfi参数得到文件的图标句柄。但要注意在uFlags参数中不使用SHGFI_PIDL时,SHGetFileInfo()不能获得“我的电脑”等虚似文件夹的信息。
应该注意的是,在调用SHGetFileInfo()之前,必须使用 CoInitialize 或者OleInitialize 初始化COM,否则表面上能够使用,但是会造成不安全或者丧失部分功能。例如,一个常见的例子:如果不初始化COM,那么调用该函数就无法得到.htm/.mht/.xml文件的图标。
以下是两个例子:

1.获得系统图标列表:

//取得系统图标列表
usesShellAPI
varImageListHandle : THandle;FileInfo: TSHFileInfo;
//小图标
ImageListHandle := SHGetFileInfo('C:/',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
//把图标列表同一个名叫ListView1的ListView控件的小图标关联。
SendMessage(ListView1.Handle, LVM_SETIMAGELIST, LVSIL_SMALL, ImageListHandle);
//大图标
ImageListHandle := SHGetFileInfo('C:/',0,FileInfo,SizeOf(FileInfo),SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
//把图标列表同一个名叫ListView1的ListView控件的大图标关联。
SendMessage(ListView1.Handle, LVM_SETIMAGELIST, LVSIL_NORMAL, ImageListHandle);

2.获得一个文件的显示名和图标

varsfi: TSHFileInfo;IconIndex : Integer;
//取图标的索引号等信息
SHGetFileInfo(PAnsiChar(FileName),0,sfi,sizeof(TSHFileInfo),ShellAPI.SHGFI_DISPLAYNAME or ShellAPI.SHGFI_TYPENAME or ShellAPI.SHGFI_LARGEICON or ShellAPI.SHGFI_ICON);
//显示名和图标在系统图标列表中的编号就分别在sfi.szDisplayName和sfi.iIcon中 

原文链接:SHGetFileInfo函数详解

SHGetFileInfo函数详解相关推荐

  1. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  2. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  3. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

  4. 【FFmpeg】函数详解(一)

    FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...

  5. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  6. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  7. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

  8. python基础知识~ 函数详解2

    python~函数详解2  1 生成器函数    定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数   须知 yield和return一样,都可以返回数 ...

  9. scanf函数详解与缓冲区

    1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...

最新文章

  1. RAC常见命令检查状态
  2. JAVA反射+SOCKET实现远程方法调用
  3. linux查看无线网卡频率,查看无线网卡工作模式
  4. DVWA--文件上传漏洞
  5. 用户、角色和权限,多表查询
  6. 基于Linux的 Open×××网络之网络架构应用实例
  7. easycode不推荐使用_为什么MySQL不推荐使用uuid或者雪花id作为主键?
  8. 计算机专业中英文,计算机专业词汇中英文对照
  9. 群晖使用ClouDNS免费DDNS解析
  10. java计算机毕业设计智慧校园食堂点餐系统源码+mysql数据库+系统+lw文档+部署
  11. 软件运维工程师岗位职责和要求
  12. 华硕fl5600l装固态并重装系统到固态
  13. 如何推动数字经济新时代产业转型升级
  14. 基于springboot vue elementui酒店预订系统源码(毕设)
  15. 设置CRT使用Console连接网络设备
  16. 从开发转型到项目经理,在初创公司我做了什么
  17. Python 运维自动化之服务器信息采集
  18. vue3结合ts,导入vue项目文件,代码出现红色波浪线
  19. 学计算机常用到的英语,常用计算机英语词汇学习
  20. 正态分布的概率密度函数python_python 计算概率密度、累计分布、逆函数的例子...

热门文章

  1. linux 安装ubuntu-16.04-server-amd64
  2. python四十一:hashlib模块
  3. max分发-(网络系统克隆)
  4. 《java编程思想》学习笔记——复用类
  5. linux 下安装 php 扩展 典型安装 mysql curl mb_string
  6. spring AOP编程
  7. 突破安全狗防注入及上传的一些思路
  8. json2.js的初步学习与了解(转)
  9. 圣诞日记2010-12-25:认清形势,看清方向,正确选择,努力拼搏(更新 )
  10. elasticsearch常见报错总结