SHFILEINFO Structure
包含关于一个文件对象的信息
语法
typedef struct _SHFILEINFO {
HICON hIcon;
int iIcon;
DWORD dwAttributes;
TCHAR szDisplayName[MAX_PATH];
TCHAR szTypeName[80];
} SHFILEINFO;
成员
hIcon
一个文件图标的句柄。如果不再需要这个句柄,应该使用DestroyIcon函数来销毁这个句柄。
iIcon
系统图片列表中图标图片的索引。
dwAttributes
一个数组,它标识着文件对象的属性。
szDisplayName
包含文件名的字符串,如同Microsoft Windows Shell中显示的一样。或者是路径和文件名它包含了代表文件的图标。
szTypeName
描述文件类型的字符串。
备注
该结构用于SHGetFileInfo函数。
结构信息
Header shellapi.h
Minimum operating systems Windows NT 4.0, Windows 95
在进行一些与Shell有关的编程时,经常会用到SHGetFileInfo()函数。比如当你想获得一个文件的表示名,图标或者系统的图标列表时,用SHGetFileInfo()函数会比用IShellFolder简单不少。
以下是两个例子:
1.获得系统图标列表:
HIMAGELIST hImageList;
SHFILEINFO sfi;
hImageList = (HIMAGELIST)SHGetFileInfo(L"",
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
// 把图标列表同一个名叫m_FileList的List控件关联。
m_FileList.SendMessage( LVM_SETIMAGELIST, (WPARAM)LVSIL_SMALL, (LPARAM)hImageList);
2.获得一个文件的显示名和图标
TCHAR szFilePath[MAX_PATH];
SHFILEINFO sfi;
hImageList = (szFilePath,
0,
&sfi,
sizeof(SHFILEINFO),
SHGFI_DISPLAYNAME | SHGFI_SYSICONINDEX | SHGFI_SMALLICON )
// 显示名和图标在系统图标列表中的编号就分别在sfi.szDisplayName和sfi.iIcon中
应该注意的是,在调用SHGetFileInfo()之前,必须使用 CoInitialize 或者OleInitialize 初始化COM,否则表面上能够使用,但是会造成不安全或者丧失部分功能。例如,一个常见的例子:如果不初始化COM,那么调用该函数就无法得到.htm/.mht/.xml文件的图标。