无法使用SHGetFileInfo获取“我的电脑”特殊文件夹的图标

时间:2012-07-16 14:19:26

标签: windows-7 .net-2.0 pinvoke

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

我用来调用SHGetFileInfo的标记是SHGFI_ICONSHGFI_SMALLICON,所以没什么特别的。

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

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:0)

我决定直接使用ExtractIconEx并从MyComputer(图标索引15)阅读shell32.dll图标。与Win API不同,似乎图标列表不会改变:)