使用SHGetStockIconInfo函数可以获取系统定义的 Shell 图标的信息
SHGetStockIconInfo函数定义如下:
1 SHSTDAPI SHGetStockIconInfo( 2 SHSTOCKICONID siid, 3 UINT uFlags, 4 [in, out] SHSTOCKICONINFO *psii 5 );
SHSTOCKICONID siid:SHSTOCKICONID 枚举中的值之一,指定应检索哪个图标
UINT uFlags:以下零个或多个标志的组合,这些标志指定请求的信息
标志 | 说明 |
SHGSI_ICONLOCATION | SHSTOCKICONINFO 结构的 szPath 和 iIcon 成员采用适合传递给 ExtractIcon 函数的格式接收所请求图标的路径和图标索引。 此标志的数值为零,因此无论其他标志如何,你始终都会获得图标位置。 |
SHGSI_ICON | SHSTOCKICONINFO 结构的 hIcon 成员接收指定图标的句柄 |
SHGSI_SYSICONINDEX | SHSTOCKICONINFO 结构的 iSysImageImage 成员接收系统映像列表中指定图标的索引 |
SHGSI_LINKOVERLAY | 通过使函数将链接覆盖添加到文件图标来修改SHGSI_ICON值 |
SHGSI_SELECTED | 通过使函数将图标与系统突出显示颜色混合来修改SHGSI_ICON值 |
SHGSI_LARGEICON | 修改SHGSI_ICON值,方法是使函数检索由SM_CXICON和SM_CYICON系统指标指定的大型图标版本 |
SHGSI_SMALLICON | 修改SHGSI_ICON值,方法是使函数检索由SM_CXSMICON指定的小版本图标,并SM_CYSMICON系统指标 |
SHGSI_SHELLICONSIZE | 修改SHGSI_LARGEICON或SHGSI_SMALLICON值,方法是使函数检索 Shell 大小的图标,而不是系统指标指定的大小 |
SHSTOCKICONINFO *psii:指向SHSTOCKICONINFO 结构的指针。
注意:调用此函数时,需要将此结构的 cbSize 成员设置为 SHSTOCKICONINFO 结构的大小。
示例:获取UAC盾牌的图标
1 SHSTOCKICONINFO info{}; 2 info.cbSize = sizeof(SHSTOCKICONINFO); 3 auto hr = SHGetStockIconInfo(SIID_SHIELD, SHGSI_ICON | SHGSI_LARGEICON, &info);
参考资料:
SHGetStockIconInfo函数
SHGetStockIconInfo 函数 (shellapi.h) - Win32 apps | Microsoft Learn