如何获取文件缩略图(C#和C++实现)
创始人
2024-11-15 12:09:18
0

在C++中,可以有以下两种办法

使用COM接口IThumbnailCache

文档链接:IThumbnailCache (thumbcache.h) - Win32 apps | Microsoft Learn

示例代码如下:

VOID GetFileThumbnail(PCWSTR path) {     HRESULT hr = CoInitialize(nullptr);      IShellItem* item = nullptr;     hr = SHCreateItemFromParsingName(path, nullptr, IID_PPV_ARGS(&item));      IThumbnailCache* cache = nullptr;     hr = CoCreateInstance(         CLSID_LocalThumbnailCache,         nullptr,         CLSCTX_INPROC,         IID_PPV_ARGS(&cache));      WTS_CACHEFLAGS flags = WTS_LOWQUALITY;     ISharedBitmap* shared_bitmap;     hr = cache->GetThumbnail(         item,         12*16,         WTS_EXTRACT,         &shared_bitmap,         nullptr,         nullptr);      HBITMAP hbitmap = NULL;     hr = shared_bitmap->GetSharedBitmap(&hbitmap);     shared_bitmap->Release();     cache->Release();     CoUninitialize();      //使用hbitmap,使用完成后调用DeleteObject     DeleteObject(hbitmap);  }

前面我一直使用的这种方式,但是最近系统升级后,会报 Generic Error in GDI+ 

后面我升级成了下面这种方式

使用IShellItemImageFactory接口

文档链接:IShellItemImageFactory (shobjidl_core.h) - Win32 apps | Microsoft Learn

官方示例代码:Windows-classic-samples/Samples/Win7Samples/winui/shell/appplatform/UsingImageFactory/ImageFactorySample.cpp at main · microsoft/Windows-classic-samples · GitHub

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);     HBITMAP hbmp = NULL;      if (SUCCEEDED(hr))     {         IShellItemImageFactory* pImageFactory;         hr = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&pImageFactory));         if (SUCCEEDED(hr))         {             SIZE size = { 256, 256 };  //图像大小             hr = pImageFactory->GetImage(size, SIIGBF_THUMBNAILONLY, &hbmp);             pImageFactory->Release();         }         CoUninitialize();          //使用hbmp,使用完成后调用DeleteObject         DeleteObject(hbmp);     }

在C#中使用,可以直接nuget引用  WindowsAPICodePack-Shell  包

PM> NuGet\Install-Package WindowsAPICodePack-Shell -Version 1.1.1

然后用下面的代码就可以获取文件缩略图

ShellFile shellFile = ShellFile.FromFilePath(filepath); Bitmap shellThumb = shellFile.Thumbnail.ExtraLargeBitmap;

相关内容

热门资讯

玩家实测!微信小程序免费黑科技... 玩家实测!微信小程序免费黑科技(外挂),微乐自建房辅助工具在哪切实的确有挂1. 选牌创建新账号,点击...
值得注意的是!微信闲来神器软件... 值得注意的是!微信闲来神器软件下载,四海茶馆游戏辅助(原来是真的软件)-哔哩哔哩1、操作简单,无需微...
热点推荐!!微信小程序黑科技(... 热点推荐!!微信小程序黑科技(外挂),微信小程序游戏破解微乐辅助总是确实有挂1、许多玩家不知道辅助怎...
据统计!闽游app辅助器,微信... 据统计!闽游app辅助器,微信大厅辅助软件(原来是有挂)-哔哩哔哩在进入微信大厅辅助软件软件靠谱后,...
一分钟揭秘!!微信小程序免费黑... 一分钟揭秘!!微信小程序免费黑科技(外挂),微乐小程序挂哪里有果然有挂解密亲,关键说明,透视脚本安卓...
有了最新消息!钱塘13挂件,斗... 有了最新消息!钱塘13挂件,斗城麻将微信有没有挂(切实是有工具)-哔哩哔哩1、该软件可以轻松地帮助玩...
玩家必看秘籍!微信小程序黑科技... 玩家必看秘籍!微信小程序黑科技(外挂),微乐家乡麻辣自建房辅助app其实有挂教学1、下载好透视辅助下...
今日百科!微乐小程序免费黑科技... 今日百科!微乐小程序免费黑科技(外挂),手机微乐小程序自建房透视免费竟然有挂辅助1、每一步都需要思考...
据权威媒体报道!雅苑蕲春辅助,... 据权威媒体报道!雅苑蕲春辅助,九九联盟破解版(切实真的有软件)-哔哩哔哩1)九九联盟破解版有没有挂:...
总算了解!!微信小程序黑科技(... 总算了解!!微信小程序黑科技(外挂),微乐家乡辅助app免费本来有挂存在辅助器是一种具有地方特色的麻...