MFC文件之SHGetFileInfo函数与SHFILEINFO结构体

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC文件之SHGetFileInfo函数与SHFILEINFO结构体相关的知识,希望对你有一定的参考价值。

SHFILEINFO 结构体

作用:

SHFILEINFO包含一个文件的信息。

定义

typedef struct _SHFILEINFO 
	HICON hIcon;
	int iIcon;
	DWORD dwAttributes;
	char szDisplayName[MAX_PATH];
	char szTypeName[80];
 SHFILEINFO;

成员

  • hIcon:代表文件的图标的句柄。
  • iIcon:系统图像列表中图标图像的索引。
  • dwAttributes:指定文件对象的属性。
  • szDisplayName :以空字符结尾的字符串,其中包含文件在 Windows shell 中出现的名称,或者包含代表文件的图标的文件的路径和名称。
  • szTypeName:描述文件类型的空终止字符串。

注意:此结构与SHGetFileInfo函数一起使用。

SHGetFileInfo函数

作用:

获得系统图标列表。

函数原型

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

参数

  • pszPath: 指向包含路径和文件名的缓冲区的指针。绝对路径和相对路径都是有效的。有关更多信息,请参阅备注。

  • dwFileAttributes: 一个或多个文件属性标志(FILE_ATTRIBUTE_* 值)的组合。如果uFlags不包括 SHGFI_USEFILEATTRIBUTES标志,则忽略此参数。

    下表显示了 Windows Embedded CE 支持的附加值。

价值描述
FILE_ATTRIBUTE_INROM该文件是存储在 ROM 中的操作系统 (OS) 文件。这些文件是只读的。
FILE_ATTRIBUTE_ROMMODULE该文件是存储在 ROM 中的操作系统文件,旨在就地执行。换句话说,该文件中的代码直接从 ROM 执行,而不是首先复制到 RAM。该的CreateFile函数不能用于访问此文件。请改用LoadLibrary和CreateProcess函数。
  • psfi: 指向SHFILEINFO结构以接收文件信息的指针。
  • cbFileInfo: psfi参数指向的SHFILEINFO结构的大小(以字节为单位)。
  • uFlags: 指定要检索的文件信息的标志。它可以是下表中的值的组合。
价值描述
SHGFI_属性检索项目属性。属性被复制到psfi参数中指定的结构的dwAttributes成员。
SHGFI_DISPLAYNAME检索文件的显示名称。名称被复制到szDisplayName中指定的结构的构件PSFI。
SHGFI_EXETYPE如果pszPath标识可执行文件,则检索可执行文件的类型。此标志不能与任何其他标志一起指定。
SHGFI_ICON检索代表文件的图标的句柄和系统图像列表中图标的索引。句柄被复制到由psfi指定的结构的hIcon成员,索引被复制到iIcon成员。返回值是系统映像列表的句柄。您必须在此图标句柄上调用DestroyIcon函数。
SHGFI_ICONLOCATION检索包含代表文件的图标的文件的名称。名称被复制到szDisplayName中指定的结构的构件PSFI。
SHGFI_LARGEICON修改 SHGFI_ICON,使函数检索文件的大图标。
SHGFI_LINKOVERLAY修改 SHGFI_ICON,使函数将链接覆盖添加到文件的图标。
SHGFI_OPENICON修改 SHGFI_ICON,使函数检索文件的打开图标。容器对象显示一个打开的图标以指示容器已打开。
SHGFI_PIDL对于 Windows CE 1.0 到 2.01 以及 Windows Embedded CE Handheld PC Edition 3.0 版和 Windows Embedded CE Handheld PC Professional Edition 3.0 版,指示pszPath是ITEMIDLIST结构的地址而不是路径名。
SHGFI_SELECTED修改 SHGFI_ICON,使函数将文件图标与系统突出显示颜色混合。
SHGFI_SMALLICON修改 SHGFI_ICON,使函数检索文件的小图标。
SHGFI_SYSICONINDEX检索系统图像列表中图标的索引。该指数被复制到iIcon由指定的结构的构件PSFI。返回值是系统映像列表的句柄。
SHGFI_TYPENAME检索描述文件类型的字符串。的字符串被复制到szTypeName中指定的结构的构件PSFI。
SHGFI_USEFILEATTRIBUTES指示函数不应尝试访问由pszPath指定的文件。相反,它应该表现为pszPath指定的文件存在,并且文件属性在dwFileAttributes 中传递。此标志不能与 SHGFI_ATTRIBUTES、SHGFI_EXETYPE 或 SHGFI_PIDL 标志结合使用。
SHGFI_SELECTICON修改 SHGFI_ICON,使函数检索处于选定状态的文件图标。
如果SHGetFileInfo函数在请求 SHGFI_SELECTICON 时找不到文件的注册选择图标,它将返回默认图标。
SHGFI_SHELLICONSIZE修改 SHGFI_ICON,使函数检索外壳大小的图标。如果未指定此标志,则函数根据系统度量值调整图标的大小。

以上是关于MFC文件之SHGetFileInfo函数与SHFILEINFO结构体的主要内容,如果未能解决你的问题,请参考以下文章

SHGetFileInfo 返回空图标

SHGetFileInfo() 返回错误的 HICON

如何使用Shell32.SHGetFileInfo在Windows 7上获取文件夹图标

使用 SHGetFileInfo 获取 exe 图标失败

获取文件夹中的图标资源

MFC 之 OnClose 与 OnCancel