gpt4 book ai didi

c++ - 我可以根据系统文件中某处的不同系统加载默认 Windows 图标吗

转载 作者:行者123 更新时间:2023-11-28 03:08:31 26 4
gpt4 key购买 nike

具体来说,我正在尝试编写一个在不同 Windows 系统(主要是 XP 和 Win7 或 Win8)上运行的 Windows 程序。我希望它从系统文件中的某处加载系统默认图标(我也不知道)。这可能吗?我该怎么做?

例如,一个 Text.txt 文件在 Windows XP 上有它的图标,但在 Win7 上有不同的图标。 XP的回收站也不同于Win7的回收站。那么我在哪里可以将这个系统相关的图标加载到我的程序中呢? ps 我使用的是 VC6,而不是 .NET。

最佳答案

如果您想要特定类型文件的图标,您可以使用 SHGetFileInfo。例如,获取文本文件的图标:

SHFILEINFO sfi;
if (SHGetFileInfo(L".txt", FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES ))
{
// you now have the icon in sfi.hIcon
// remember to destroy it when you are done with it
DestroyIcon(sfi.hIcon);
}

SHGFI_ICON 标志表示我们需要大图标。您可以添加 SHGFI_SMALLICON 标志来获取小图标。

SHGFI_USEFILEATTRIBUTES 表示我们传递的文件名不一定存在 - 该函数将返回文件类的图标,而不是特定现有文件的图标。如果您想要特定文件的图标,则将文件的完整路径名传递给 SHGetFileInfo 函数并省略此标志。

如果你想要回收站之类的系统文件夹的图标,这个功能也可以做到。例如:

LPITEMIDLIST pidl;
if (SUCCEEDED(SHGetFolderLocation(0, CSIDL_BITBUCKET, 0, 0, &pidl)))
{
SHFILEINFO sfi;
if (SHGetFileInfo((LPCWSTR)pidl, 0, &sfi, sizeof(sfi), SHGFI_ICON | SHGFI_PIDL))
{
// you now have the icon in sfi.hIcon
// remember to destroy it when you are done with it
DestroyIcon(sfi.hIcon);
}
CoTaskMemFree(pidl);
}

请参阅 SHGetFileInfo 的文档有关标志的完整列表。并确保在使用这些函数之前调用了 OleInitialize()CoInitializeEx() 来初始化 COM。

关于c++ - 我可以根据系统文件中某处的不同系统加载默认 Windows 图标吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19087635/

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