检索系统定义的 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 标志可能包含一个系统错误代码. |
在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