Windows编程:获取系统图标

发布时间 2023-08-28 14:17:44作者: zhaotianff

使用SHGetStockIconInfo函数可以获取系统定义的 Shell 图标的信息

 

SHGetStockIconInfo函数定义如下:

1 SHSTDAPI SHGetStockIconInfo(
2             SHSTOCKICONID   siid,
3             UINT            uFlags,
4   [in, out] SHSTOCKICONINFO *psii
5 );

 

SHSTOCKICONID siidSHSTOCKICONID 枚举中的值之一,指定应检索哪个图标

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函数

https://learn.microsoft.com/zh-cn/windows/win32/api/shellapi/nf-shellapi-shgetstockiconinfo