gpt4 book ai didi

c++ - 我无法让 SHGetFileInfo 返回图标位置

转载 作者:行者123 更新时间:2023-11-27 23:56:19 25 4
gpt4 key购买 nike

我在 Windows 10 专业版和 Visual Studio 2013 上,我正在使用 SHGetFileInfoW获取文件类型的图标位置(路径 + 索引):

std::wstring wFile { L"a.bas" };
SHFILEINFOW fi {};
DWORD success = ::SHGetFileInfoW(wFile.c_str(),
FILE_ATTRIBUTE_NORMAL,
&fi,
sizeof(fi),
SHGFI_USEFILEATTRIBUTES | SHGFI_ICONLOCATION);

无论 wFile 是指现有文件还是任何文件名,调用都会返回 1 表示成功。 fiiIcon 成员设置为数字,但szDisplayString 为空。不仅驱动器号被 \0 覆盖(似乎发生了 here ),而且它完全被 \0 填满了。

Microsoft 建议使用 IExtractIcon :: GetIconLocation作为替代方案,但我需要获取不在本地文件系统上的文件的图标,因此我无法获取可以获取此接口(interface)指针的 IShellInfo 对象。

另一方面,获取图标句柄是可行的。这个功能是有问题还是我做错了什么?有解决方法吗?

最佳答案

图标可以动态生成,并且可能不会公开其图像的路径。图标处理程序通过在其 IExtractIcon::GetIconLocation 中设置 GIL_NOTFILENAME 标志将其传达给 shell执行。如果设置了 GIL_SIMULATEDOC,shell 通常还必须动态生成一个图标。

如果您调用 SHGetFileInfo 并设置了 SHGFI_SELECTED 标志,那么无论您请求哪种文件类型,函数都可能必须生成一个新图标。

如果您在 ListView/TreeView 中显示文件列表,那么您通常使用 SHGFI_SYSICONINDEX|SHGFI_SHELLICONSIZE|SHGFI_SMALLICON 并使用系统图像列表。

如果您需要 HICON,请使用 SHGFI_ICON

如果指定了 SHGFI_ICONLOCATION,则 SHGetFileInfo 使用 IExtractIcon:

Retrieve the name of the file that contains the icon representing the file specified by pszPath, as returned by the IExtractIcon::GetIconLocation method of the file's icon handler.

关于c++ - 我无法让 SHGetFileInfo 返回图标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42676256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com