函数参考


_WinAPI_ShellGetStockIconInfo

检索系统定义的 Shell 图标信息.

#Include <WinAPIEx.au3>
_WinAPI_ShellGetStockIconInfo ( $SIID, $iFlags )

参数

$SIID $SIID_* 常量,指定要检索的图标 .
$iFlags 信息要求.参数可以是以下值的组合:
$SHGSI_ICONLOCATION --- $tagSHSTOCKICONINFO 结构的 szPath 与 iIcon 成员接收请求的请求的路径和图标
$SHGSI_ICON --- $tagSHSTOCKICONINFO 结构的 iIcon 成员接收请求的图标句柄
$SHGSI_SYSICONINDEX --- $tagSHSTOCKICONINFO 结构的 iSysImageImage 成员接收系统图像列表中指定图标索引
$SHGSI_LINKOVERLAY --- 修改 SHGSI_ICON 值,使函数将链接添加到覆盖该文件的图标
$SHGSI_SELECTED --- 修改 SHGSI_ICON 值,使函数融合图标与系统的高亮颜色
$SHGSI_LARGEICON --- 修改 SHGSI_ICON 值,使函数检索 SM_CXICON和SM_CYICON 系统标准中指定的大图标
$SHGSI_SMALLICON --- 修改 SHGSI_ICON 值,使函数检索 SM_CXICON 与 SM_CYICON 系统标准中指定的小图标
$SHGSI_SHELLICONSIZE --- 修改 SHGSI_LARGEICON 或 SHGSI_SMALLICON 值,使函数检索 Shell 大小的图标,而不是由系统标准规定的尺寸

返回值

成功: 返回 $tagSHSTOCKICONINFO 结构,包含所要求的资料.
失败: 返回 0,设置 @error 标志为非 0 值, @extended 标志可能包含一个系统错误代码.

注意/说明

如果此函数返回 $tagSHSTOCKICONINFO 结构中 "hIcon" 成员指向的图标句柄,
 当你不再需要它时,调用 _WinAPI_DestroyIcon() 释放它.
 本函数需要 Windows Vista 或更高版本系统.

相关

详情参考

在MSDN中搜索


示例/演示


#Include <APIConstants.au3>
#include <GUIConstantsEx.au3>
#Include <StaticConstants.au3>
#Include <WinAPIEx.au3>

Opt('MustDeclareVars', 1)

Global Const $STM_SETIMAGE = 0x0172

If _WinAPI_GetVersion() < '6.0' Then
    MsgBox(16, 'Error', 'Require Windows Vista or later.')
    Exit
EndIf

Global $Msg, $Icon, $Label, $Prev, $Next, $tSHSTOCKICONINFO, $hIcon, $hOld, $Count = 0, $Update = True

GUICreate('MyGUI', 200, 236)
GUICtrlCreateIcon('', 0, 36, 36, 128, 128)
$Icon = GUICtrlGetHandle(-1)
GUICtrlSetState(-1, $GUI_DISABLE)
$Label = GUICtrlCreateLabel('', 70, 174, 60, 14, $SS_CENTER)
$Prev = GUICtrlCreateButton('<', 32, 200, 60, 24)
$Next = GUICtrlCreateButton('>', 108, 200, 60, 24)
GUISetState()

While 1
    If $Update Then
        GUICtrlSetData($Label, 'SIID: ' & $Count)
        $tSHSTOCKICONINFO = _WinAPI_ShellGetStockIconInfo($Count, $SHGSI_ICONLOCATION)
        $hIcon = _WinAPI_ShellExtractIcon(DllStructGetData($tSHSTOCKICONINFO, 'Path'), DllStructGetData($tSHSTOCKICONINFO, 'iIcon'), 128, 128)
        $hOld = _SendMessage($Icon, $STM_SETIMAGE, 1, $hIcon)
        If $hOld Then
            _WinAPI_DestroyIcon($hOld)
        EndIf
        $Update = 0
    EndIf
    $Msg = GUIGetMsg()
    Switch $Msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Prev
            $Count -= 1
            If $Count < 0 Then
                $Count = $SIID_MAX_ICONS - 1
            EndIf
            $Update = 1
        Case $Next
            $Count += 1
            If $Count > $SIID_MAX_ICONS - 1 Then
                $Count = 0
            EndIf
            $Update = 1
    EndSwitch
WEnd