SHGetFileInfo函数详解
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函数详解相关推荐
- C语言网络编程:accept函数详解
文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...
- 【FFmpeg】函数详解(三)
FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...
- 【FFmpeg】函数详解(二)
FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...
- 【FFmpeg】函数详解(一)
FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...
- 【ES6】Generator函数详解
[ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...
- mysql的聚合函数综合案例_MySQL常用聚合函数详解
一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...
- python平方数迭代器_对python中的高效迭代器函数详解
python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...
- python基础知识~ 函数详解2
python~函数详解2 1 生成器函数 定义 如果函数有yield这个关键字,就是生成器函数.生成器函数() 获取的是生成器,不执行函数 须知 yield和return一样,都可以返回数 ...
- scanf函数详解与缓冲区
1.基本信息 函数原型: int scanf( char *format, args, ...); 函数返回值: 读入并赋给args的数据个数,遇到文件结束返回EOF,出错返回0. 函数功能: sca ...
最新文章
- RAC常见命令检查状态
- JAVA反射+SOCKET实现远程方法调用
- linux查看无线网卡频率,查看无线网卡工作模式
- DVWA--文件上传漏洞
- 用户、角色和权限,多表查询
- 基于Linux的 Open×××网络之网络架构应用实例
- easycode不推荐使用_为什么MySQL不推荐使用uuid或者雪花id作为主键?
- 计算机专业中英文,计算机专业词汇中英文对照
- 群晖使用ClouDNS免费DDNS解析
- java计算机毕业设计智慧校园食堂点餐系统源码+mysql数据库+系统+lw文档+部署
- 软件运维工程师岗位职责和要求
- 华硕fl5600l装固态并重装系统到固态
- 如何推动数字经济新时代产业转型升级
- 基于springboot vue elementui酒店预订系统源码(毕设)
- 设置CRT使用Console连接网络设备
- 从开发转型到项目经理,在初创公司我做了什么
- Python 运维自动化之服务器信息采集
- vue3结合ts,导入vue项目文件,代码出现红色波浪线
- 学计算机常用到的英语,常用计算机英语词汇学习
- 正态分布的概率密度函数python_python 计算概率密度、累计分布、逆函数的例子...