SHGetFileInfoA是shell32.dll里的一个函数,用来获取文件的文件系统对象的信息。这个对象可以是文件,文件夹,目录或驱动器根。
https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shgetfileinfoa
SHGetFileInfoA原型
DWORD_PTR SHGetFileInfoA( LPCSTR pszPath, DWORD dwFileAttributes, SHFILEINFOA *psfi, UINT cbFileInfo, UINT uFlags );
取文件信息SHGetFileInfoA
.版本 2
.DLL命令 取文件信息_, 整数型, "shell32.dll", "SHGetFileInfoA", , SHGetFileInfo
.参数 文件路径, 文本型, , pszPath
.参数 文件属性, 整数型, , dwFileAttributes
.参数 文件信息结构, 文件信息_, , psfi
.参数 文件信息结构大小, 整数型, , cbFileInfo
.参数 信息标志, 整数型, , uFlags
数据类型 SHFILEINFO结构定义如下:
typedef struct _SHFILEINFO {
HICON hIcon; //文件的图标句柄
int iIcon; //图标的系统索引号
DWORD dwAttributes; //文件的属性值
TCHAR szDisplayName[MAX_PATH]; //文件的显示名
TCHAR szTypeName[80]; //文件的类型名
} SHFILEINFO;
.版本 2 .数据类型 文件信息_, , SHFILEINFO .成员 图标句柄, 整数型, , , hIcon .成员 图标索引, 整数型, , , iIcon .成员 图标属性, 整数型, , , dwAttributes .成员 显示名称, 字节型, , "260", szDisplayName .成员 类型名称, 字节型, , "80", szTypeName
易语言调用
我们先在C盘c:\autoexec.bat建立一个文件。
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮_取文件信息_被单击
.局部变量 局部_文件信息, 文件信息_
CoInitialize (0)
取文件信息_ (“c:\autoexec.bat”, 0, 局部_文件信息, 352, 位或 (#SHGFI_DISPLAYNAME, #SHGFI_TYPENAME))
列表框_运行结果.清空 ()
列表框_运行结果.加入项目 (“文件名:” + 子程序_字节数组到文本 (局部_文件信息.显示名称), )
列表框_运行结果.加入项目 (“文件类型: ” + 子程序_字节数组到文本 (局部_文件信息.类型名称), )
.子程序 子程序_字节数组到文本, 文本型
.参数 参数_文本, 字节型, 数组
.局部变量 局部_计次变量, 整数型
.局部变量 局部_临时文本, 文本型
.计次循环首 (取数组成员数 (参数_文本), 局部_计次变量)
局部_临时文本 = 局部_临时文本 + 字符 (参数_文本 [局部_计次变量])
.计次循环尾 ()
返回 (局部_临时文本)
CoInitialize
在调用SHGetFileInfo()之前,必须使用 CoInitialize 初始化COM,否则表面上能够使用,但是会造成不安全或者丧失部分功能。
.版本 2 .DLL命令 CoInitialize, 整数型, "ole32", "CoInitialize" .参数 pvReserved, 整数型, , 0