Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VIsta中的图标提取_C#_Windows Vista_Icons - Fatal编程技术网

C# VIsta中的图标提取

C# VIsta中的图标提取,c#,windows-vista,icons,C#,Windows Vista,Icons,用于提取我正在使用的特殊文件夹图标 ExtractIconEx(Environment.SystemDirectory + "\\shell32.dll",ncIconIndex, handlesIconLarge, handlesIconSmall, 1); 在这里,我将为特殊文件夹(如MyDocs、MyPictures等)显式传递nIconIndex 它在XP中工作正常,但在Vista中检索不到正确的图标。在这里,它检索黄色文件夹图标。情况不应该如此。 Cn在这方面有人能帮我吗?请查看。我

用于提取我正在使用的特殊文件夹图标

ExtractIconEx(Environment.SystemDirectory + "\\shell32.dll",ncIconIndex, handlesIconLarge, handlesIconSmall, 1);
在这里,我将为特殊文件夹(如MyDocs、MyPictures等)显式传递nIconIndex 它在XP中工作正常,但在Vista中检索不到正确的图标。在这里,它检索黄色文件夹图标。情况不应该如此。
Cn在这方面有人能帮我吗?

请查看。

我从.NET(它是用VB.NET实现的)看到的在这方面取得成功的最好例子就是在这篇文章中


我的$.02是,由于所需的COM互操作级别和API的复杂性,在.NET中使用shell API非常痛苦。

Vista添加了一个名为SHGetStockIconInfo的新API,但它不支持我的文档AFAIK。但这并不重要,因为您应该使用的方法适用于XP和Vista(当用户选择自定义图标时,您当前的解决方案将不起作用,您只是查看硬编码的系统DLL,这可能会在任何时候发生变化)

因此,您应该做的是,获取您感兴趣的shell文件夹(SHGetFolderPath和friends)的路径或PIDL,并将该路径/PIDL传递给SHGetFileInfo。SHGetFileInfo可以为您提供一个图标句柄,或系统映像列表的索引


我不确定这些函数的.NET等价物是什么,但您应该能够弄清楚,或者使用PInvoke

虽然IconLib在处理和提取.NET中的文件图标方面是无与伦比的,但我认为它不能满足Anees的要求,即从Windows shell API中获取特殊文件夹的图标。