首页 > 其他分享 >如何获取文件缩略图

如何获取文件缩略图

时间:2023-12-26 17:36:03浏览次数:38  
标签:文件 缩略图 hr cache nullptr bitmap 获取 hbitmap shared

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

使用COM接口IThumbnailCache

文档链接:https://learn.microsoft.com/en-us/windows/win32/api/thumbcache/nn-thumbcache-ithumbnailcache

示例代码如下:

 1 VOID GetFileThumbnail(PCWSTR path)
 2 {
 3     HRESULT hr = CoInitialize(nullptr);
 4 
 5     IShellItem* item = nullptr;
 6     hr = SHCreateItemFromParsingName(path, nullptr, IID_PPV_ARGS(&item));
 7 
 8     IThumbnailCache* cache = nullptr;
 9     hr = CoCreateInstance(
10         CLSID_LocalThumbnailCache,
11         nullptr,
12         CLSCTX_INPROC,
13         IID_PPV_ARGS(&cache));
14 
15     WTS_CACHEFLAGS flags = WTS_LOWQUALITY;
16     ISharedBitmap* shared_bitmap;
17     hr = cache->GetThumbnail(
18         item,
19         12*16,
20         WTS_EXTRACT,
21         &shared_bitmap,
22         nullptr,
23         nullptr);
24 
25     HBITMAP hbitmap = NULL;
26     hr = shared_bitmap->GetSharedBitmap(&hbitmap);
27     shared_bitmap->Release();
28     cache->Release();
29     CoUninitialize();
30 
31     //使用hbitmap,使用完成后调用DeleteObject
32     DeleteObject(hbitmap);
33 
34 }

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

 

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

使用IShellItemImageFactory接口

文档链接:https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nn-shobjidl_core-ishellitemimagefactory

官方示例代码:https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/winui/shell/appplatform/UsingImageFactory/ImageFactorySample.cpp

 1     HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
 2     HBITMAP hbmp = NULL;
 3 
 4     if (SUCCEEDED(hr))
 5     {
 6         IShellItemImageFactory* pImageFactory;
 7         hr = SHCreateItemFromParsingName(path, NULL, IID_PPV_ARGS(&pImageFactory));
 8         if (SUCCEEDED(hr))
 9         {
10             SIZE size = { 256, 256 };  //图像大小
11             hr = pImageFactory->GetImage(size, SIIGBF_THUMBNAILONLY, &hbmp);
12             pImageFactory->Release();
13         }
14         CoUninitialize();
15 
16         //使用hbmp,使用完成后调用DeleteObject
17         DeleteObject(hbmp);
18     }

 

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

 

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

 

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

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

 

标签:文件,缩略图,hr,cache,nullptr,bitmap,获取,hbitmap,shared
From: https://www.cnblogs.com/zhaotianff/p/17928871.html

相关文章

  • 弹性布局 flex 的公共的css文件
    /*弹性布局*/.flex{display:flex;}.flex1{flex:1;}.flex-column{flex-direction:column;}.justify-start{justify-content:flex-start;}.justify-end{justify-content:flex-end;}.justify-center{justify-content:center;}.justify-betw......
  • Voc2Json--挑选voc中的类别生成json文件
      importargparseimportjson,shutilimportos,sysimportxml.etree.ElementTreeasETparent=os.path.dirname(os.path.realpath(__file__))gadent=os.path.dirname(parent)sys.path.insert(0,gadent)sys.path.append(gadent)fromutils.toolimportlis......
  • 从八字命运API接口获取您的未来走向
     随着科技的快速发展和人们对个人命运的关注,越来越多的人开始寻找各类方法来预测自己的未来走向。而其中,八字预测是一种古老而又传统的方法,通过计算生辰八字,从五行八字中揭示出个人的命运走势。在这个过程中,挖数据平台提供了一款免费算命的API接口,为用户提供了便捷的命运预测服......
  • python .gitignore 文件模板 & 相关注意事项
    参考:https://blog.csdn.net/qq_38122800/article/details/132663030https://blog.csdn.net/weixin_42289273/article/details/122912938https://zhuanlan.zhihu.com/p/22494724在使用git进行代码版本管理时,对于不想提交的部分内容,可以通过.gitignore文件来配置提交时......
  • 文件概述补充
    ......
  • [EFI]华硕VivoBook FL8700JP (X509JP) 电脑 Hackintosh 黑苹果efi引导文件
    硬件型号驱动情况主板华硕VivoBookFL8700JP(X509JP)处理器i7-1065G7已驱动内存8GB+4GBDDR4已驱动硬盘西数512GSSD已驱动显卡IntellrisPlusGraphics已驱动声卡RealtekALC256已驱动有线网卡无无无线网卡+蓝牙IntelWireless-AC9461已驱动支持系统版本macosCatalina(10.15)—......
  • java接口自动化系列(02):测试数据文件设计
    说明本次分享的是测试数据存excel中,后续分享测试数据存yaml中常用数据用例数据频繁使用到的值,我们可以放到一个变量中,这样避免修改值的时候大面积修改示例sheet名称:variables解释:标题行每个单词首字母大写,因为代码里面反射会用到解释:字段数据Name:变量名,#{xxx}整体表示变量名Value:变......
  • java读取yaml文件
    应用场景自动化测试中,用例数据存放在yaml文件中 数据 person.yaml---id:1name:韧age:18---id:2name:qzcsbjage:19person2.yaml----id:3name:小韧age:18-id:4name:全栈测试笔记age:19person3.yaml----id:5name:韧哥age:18......
  • 通过Environment获取属性文件的值,竟然会调用到JNDI服务!!!
    一、背景介绍某应用在压测过程机器cpu使用率超过80%,通过在线诊断工具进行CPU采样生成的火焰图,看到程序中频繁调用environment.getProperty()获取属性值,而其内部调用了JndiPropertySource.getProperty()通过在线诊断工具进行CPU采样生成的火焰图  问题解决属性进行缓存,这......
  • grep -Ev '#|^$' zabbix_server.conf 显示配置文件 命令
    grep-Ev'#|^$'zabbix_server.confroot@k8s-node01:/etc/zabbix#grep-Ev'#|^$'zabbix_server.confLogFile=/var/log/zabbix/zabbix_server.logLogFileSize=0PidFile=/run/zabbix/zabbix_server.pidSocketDir=/run/zabbixDBName=zabbixDBUser=......