我有一个需要显示图标缩略图的WPF应用程序。 我正在使用IShellItemImageFactory接口,下面是代码:
private static IntPtr GetHBitmap(string fileName, int width, int height, SIIGBF options) {
IShellItem nativeShellItem;
Guid shellItem2Guid = new Guid(IShellItem2Guid);
int retCode = SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out nativeShellItem);
if (retCode != 0) {
return IntPtr.Zero;
}
//throw Marshal.GetExceptionForHR(retCode);
NativeSize nativeSize = new NativeSize();
nativeSize.Width = width;
nativeSize.Height = height;
IntPtr hBitmap;
HResult hr = ((IShellItemImageFactory)nativeShellItem).GetImage(nativeSize, options, out hBitmap);
Marshal.ReleaseComObject(nativeShellItem);
if (hr == HResult.Ok) return hBitmap;
return IntPtr.Zero;
//throw Marshal.GetExceptionForHR((int)hr);
}
使用以下代码获取图标:
IntPtr hBitmap = GetHBitmap(fullPath, 24, 24,
ShellUtilities.SIIGBF.SIIGBF_INCACHEONLY | ShellUtilities.SIIGBF.SIIGBF_BIGGERSIZEOK);
问题是有些图像很大而缩略图没有被缓存,在这种情况下函数应该返回null,因为我正在请求INCACHEONLY。
我试图在C ++中实现它,函数返回NULL,这是正常的,因为图像没有被缓存。 但是在这种情况下,C#方法返回一个空图像,所以请确定问题是什么。
有没有人知道这方面的解决方案?