0

SHGetFileInfo用来获取文件夹图标。一切正常,除非SHGetFileInfo在“我的电脑”特殊文件夹 - CLSID 上调用::{20D04FE0-3AEA-1069-A2D8-08002B30309D}。对于这种特殊情况,调用结构后SHGetFileInfo的值为零。SHFILEINFO.hIcon这发生在 Windows 7 上。早期在 WinXP 上代码运行良好。

我用来调用的标志SHGetFileInfoSHGFI_ICONand SHGFI_SMALLICON,所以没什么特别的。

这可能是什么原因?如何在 Windows 7 上获得“我的电脑”图标?

4

2 回答 2

0

我决定直接从(图标索引 15)使用ExtractIconEx和读取图标。与 Win API 不同,图标列表似乎没有改变 :)MyComputershell32.dll

于 2013-04-11T11:06:51.543 回答
0

您必须首先使用 SHGetSpecialFolderLocation 获取“我的电脑”的 PIDL,然后将此 PIDL 作为 SHGetFileInfo 的第一个参数传递。

IntPtr pidl;
SHGetSpecialFolderLocation(0, CSIDL_DRIVES, pidl);
SHGetFileInfo(pidl, 0, shinfo, Marshal.SizeOf(shinfo), (SHGFI_PIDL | SHGFI_DISPLAYNAME | SHGFI_ICON | SHGFI_SMALLICON));
于 2013-01-12T12:33:49.260 回答