这是非常标准的代码:
public static System.Windows.Media.Imaging.BitmapSource GetIcon(string Path, int Width = 256, int Height = 256)
{
IShellItem ppsi = null;
IntPtr hbitmap = IntPtr.Zero;
Guid uuid = new Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe");
SHCreateItemFromParsingName(Path, IntPtr.Zero, uuid, ref ppsi);
((IShellItemImageFactory)ppsi).GetImage(new SIZE(Width, Height), SIIGBF.SIIGBF_RESIZETOFIT, ref hbitmap);
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hbitmap, IntPtr.Zero, System.Windows.Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}
它一直有效,除非尝试查看 CD-ROM 上的图标(尤其是 WMV)图标。需要更多时间下载吗?或者什么... Bitmapsource 对象确实有一个“下载”事件。但是我已经逐步完成了代码并且没有被击中。
看来这也可能是一个“缓存”问题。但奇怪的是只影响 CD-Rom 图标?