SHGetFileInfo是一个相当实用的Windows API函数。
// 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
printf(" 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo\n");
printf(" - http://blog.csdn.net/morewindows/article/details/16358681 -\n");
printf(" -- By MoreWindows( http://blog.csdn.net/MoreWindows ) --\n\n"); CoInitialize(NULL);
char file_name[] = "C:\\MoreWindows.mp3";
SHFILEINFO sfi = {}; cout<<"file name = "<<file_name<<endl; // type name
SHGetFileInfo(file_name, , &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME);
cout<<"type name = "<<sfi.szTypeName<<endl; // display name
SHGetFileInfo(file_name, , &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME);
cout<<"display name = "<<sfi.szDisplayName<<endl; // attribute
SHGetFileInfo(file_name, , &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ATTRIBUTES);
cout<<"attribute = "<<hex<<sfi.dwAttributes<<endl; // 使用IShellFolder::GetAttributesOf函数解析 // HICON
// 除了SHGFI_ICON之外还有SHGFI_LARGEICON(大图标), SHGFI_SMALLICON(小图标)
SHGetFileInfo(file_name, , &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_ICON);
cout<<"HICON = 0x"<<hex<<sfi.hIcon<<endl; // 使用IShellFolder::GetAttributesOf函数解析
DestroyIcon(sfi.hIcon); // HICON system index
SHGetFileInfo(file_name, , &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_SYSICONINDEX);
cout<<"HICON system index = "<<sfi.iIcon<<endl; // 使用IShellFolder::GetAttributesOf函数解析 CoUninitialize(); // SHGFI_USEFILEATTRIBUTES 的说明
// Indicates that the function should not attempt to access the file specified by pszPath.
// Rather, it should act as if the file specified by pszPath exists with the file attributes passed in dwFileAttributes.
// This flag cannot be combined with the SHGFI_ATTRIBUTES, SHGFI_EXETYPE, or SHGFI_PIDL flags.
return ;
}