使用 SHGetFileInfo() 获取系统文件夹图标 - 获取错误的图标

问题描述 投票:0回答:1

我正在尝试检索系统的标准文件夹图标。

答案here确实检索了结构的 hIcon 成员中的图标,但对我来说,它获取的是 [系统] 驱动器图标,而不是文件夹图标。

该结构的 iIcon 成员返回 80,因此我也尝试使用 SHGFI_SYSICONINDEX 来获取相关图像列表,然后使用该 iIcon 成员的 ImageList_GetIcon()...但它返回了驱动器图标。有趣的是,使用 SHGFI_OPENICON 作为 open 文件夹图像 also 给出 80 - 让我觉得 80 确实是驱动器图标 - 那么为什么它给我那个呢?

我使用的是 Windows 10。这绝对不是我的文件夹图标的样子 - 没有任何奇怪的重新定义。

这是我正在拨打的原始电话(针对图标):

        SHGetFileInfo(
            _T(""),
            FILE_ATTRIBUTE_DIRECTORY,
            &sfi, sizeof sfi,
            SHGFI_ICON | SHGFI_LARGEICON | SHGFI_USEFILEATTRIBUTES); 

sfi.hIcon 以驱动器图标结尾。 无论是否指定 SHGFI_OPENICON,sfi.iIcon 最终都是 80。

我做错了什么吗?

谢谢。

winapi directory icons
1个回答
0
投票

根据

SHGetFileInfo

DWORD_PTR SHGetFileInfoW(
  [in]      LPCWSTR     pszPath,
            DWORD       dwFileAttributes,
  [in, out] SHFILEINFOW *psfi,
            UINT        cbFileInfo,
            UINT        uFlags
);

如果 uFlags 参数包含 SHGFI_USEFILEATTRIBUTES 标志, 该参数不必是有效的文件名。功能 将继续进行,就好像该文件存在且具有指定的名称一样 在 dwFileAttributes 参数中传递的文件属性。这 允许您通过仅传递以下内容来获取有关文件类型的信息 扩展 pszPath 并传递 FILE_ATTRIBUTE_NORMAL dwFileAttributes.

© www.soinside.com 2019 - 2024. All rights reserved.