SHGetFileInfo是一个相当实用的Windows API函数。在Windows资源管理器中就要使用它。如图中的第3列显示的就是文件的类型名称
下面来看看这个函数的详细用法:
- // 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo
- #include <Windows.h>
- #include <iostream>
- using namespace std;
- int main()
- {
- printf(" 【MoreWindows工作笔记4】 获取文件图标,类型名称,属性 SHGetFileInfo\n");
- printf(" - http://blog.youkuaiyun.com/morewindows/article/details/16358681 -\n");
- printf(" -- By MoreWindows( http://blog.youkuaiyun.com/MoreWindows ) --\n\n");
- CoInitialize(NULL);
- char file_name[] = "C:\\MoreWindows.mp3";
- SHFILEINFO sfi = {0};
- cout<<"file name = "<<file_name<<endl;
- // type name
- SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME);
- cout<<"type name = "<<sfi.szTypeName<<endl;
- // display name
- SHGetFileInfo(file_name, 0, &sfi, sizeof(sfi), SHGFI_USEFILEATTRIBUTES | SHGFI_DISPLAYNAME);
- cout<<"display name = "<<sfi.szDisplayName<<endl;
- // attribute
- SHGetFileInfo(file_name, 0, &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, 0, &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, 0, &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 0;
- }
运行结果如图所示:
.mp3文件:
.txt文件
.docx文件
地址:http://blog.youkuaiyun.com/morewindows/article/details/16358681 转载请标明出处,谢谢。