2012-11-08 42 views
0

如何确定给定路径的文件夹是否具有通用文件夹图标,或者是由用户设置的自定义文件夹?我只想使用Win32 API调用。如何确定文件夹是否有自定义图标?

我知道,我可以检查,如果里面有一个desktop.ini文件,但这个方法并不总是可用的(程序可能没有权限列出文件夹的内容),并且速度很慢,因为需要分别解析ini文件时间(图标可能不会更改)。

+0

这是什么意思?喜欢SHGetFileInfo() –

+0

我希望显示整个文件系统树,所以我必须将图标存储在某种图像列表中。通常约98%的文件夹具有标准的通用文件夹图标,只有2%具有自定义图标。我必须毫无意义地将数百或数千个相同的图标存储在该列表中。 – Spook

+0

操作系统为自己的用户界面管理系统级图像列表。您可以使用SHGetFileInfo()来访问该图像列表并获取该图像列表中的文件系统项目的索引。只需包含“SHGFI_SYSICONINDEX”标志即可。 –

回答

0

您不需要“列出文件夹内容”。该文件始终被命名为desktop.ini。如果您有文件夹路径,只需将该文件名添加到该文件夹​​并尝试打开该文件。如果失败,GetLastError()会告诉你为什么,或者是因为该文件不存在或者你没有访问权限。

+0

好的,但我**不要**想通过解析desktop.ini来做到这一点,正如我明确指出的那样!例如,即使我没有权限列出文件夹内容(=访问文件夹中的文件),SHGetFileInfo也会返回有效图标。我正在寻求清晰的WinAPI方式来解决这个问题。 – Spook

+0

你只是回答了你自己的问题 - 如果它有效,使用'SHGetFileInfo()'。所以有什么问题? –

+0

我通过P/Invoke在C#中完成它。我不想用“借来的”句柄保留图标,所以我在通过SHGetFileInfo()后立即克隆它们,然后释放它们。这样,每次我请求它们时,即使相同的图标也重复在我的列表中,这正是我想要阻止的。 – Spook

相关问题