Search the Community
Showing results for tags 'extracticonex'.
-
@TexWiller asked in Help & Support how to use _WinAPI_ExtractIconEx instead of GUICtrlSetImage This is his reproducer script for displaying his issue I cleaned it up and made it work for _WinAPI_ExtractIconEx ;============================================================================================================ ;Program Options ;============================================================================================================ Opt("MustDeclareVars", 1) ;Variables must be pre-declared. Opt("TrayMenuMode", 3) ;The default tray menu items will not be shown, items are not checked when selected. ;============================================================================================================ ;Libraries Inclusions ;============================================================================================================ #include <ColorConstants.au3> #include <TrayConstants.au3> #include <WindowsConstants.au3> #include <FontConstants.au3> #include <GuiConstantsEx.au3> #include <Array.au3> #include <GuiButton.au3> #include <StaticConstants.au3> ;============================================================================================================ ;Global Vars ;============================================================================================================ Global $hMainGUI Global $nMsg Global $IdTrayMenuMain Global $IdTrayMenuExit Main() Func Main() ;------------------------------------------------------------------------------------------------------------ ;Create Main Window ;------------------------------------------------------------------------------------------------------------ $hMainGUI = GUICreate("Sample", 1024, 700, 50, 50, BitOR($WS_SYSMENU, $WS_CAPTION, $DS_SETFOREGROUND)) GUISetFont(8, $FW_NORMAL, $GUI_FONTNORMAL, "Arial", $hMainGUI, $CLEARTYPE_QUALITY) GUISetBkColor(0xDDDDDD, $hMainGUI) GUISetState(@SW_SHOW, $hMainGUI) WinWaitActive($hMainGUI) ;============================================================================================================ ;Create Traymenu ;============================================================================================================ ;Create a Traymenu. $IdTrayMenuMain = TrayCreateItem("Sample", -1, 0) ;Create a Separator line. TrayCreateItem("", -1, -1) ;Create a Menuitem. $IdTrayMenuExit = TrayCreateItem("Exit", -1, -1) ;Show the Traymenu. TraySetState($TRAY_ICONSTATE_SHOW) ;------------------------------------------------------------------------------------------------------------ ;Sample ;------------------------------------------------------------------------------------------------------------ Local $aIconButtons[0] ;Array to manage Buttons Local $aIconBLabels[0] ;Array to manage Buttons Local $iButtonPosLeft = 10 ;Inserting Position X Local $iButtonPosTop = 10 ;Inserting Position Y Local $iButtonCount Local $iIcnPosOffset = 0 Local $iIconCt = _WinAPI_ExtractIconEx("shell32.dll", -1, 0, 0, 0) ;retrieve count of Icons ConsoleWrite("Icons: " & $iIconCt & @CRLF) Local $iIconIdx = 0 ;The Icon Index to begin extracting at Local $tIconsLg = DllStructCreate("HANDLE[" & $iIconCt & "]") Local $pIconsLg = DllStructGetPtr($tIconsLg) Local $tIconsSm = DllStructCreate("HANDLE[" & $iIconCt & "]") Local $pIconsSm = DllStructGetPtr($tIconsSm) $iIconCt = _WinAPI_ExtractIconEx("shell32.dll", $iIconIdx, $pIconsLg, $pIconsSm, $iIconCt) ;Get Large/ Small Icon Handles into arrays ConsoleWrite("Icons Extracted: " & $iIconCt & @CRLF) ; ;; PS Don't Forget _WinAPI_DestroyIcon() For $iButtonCount = 1 To 200 If BitAND($iButtonCount, 1) Then _ArrayAdd($aIconButtons, GUICtrlCreateButton("", $iButtonPosLeft, $iButtonPosTop, 45, 45, $BS_ICON)) ;Icon Only Else _ArrayAdd($aIconButtons, GUICtrlCreateButton($iButtonCount, $iButtonPosLeft, $iButtonPosTop, 45, 45)) ;Icon and Text EndIf _ArrayAdd($aIconBLabels, GUICtrlCreateLabel(1 * ($iButtonCount + $iIcnPosOffset), $iButtonPosLeft, $iButtonPosTop + 45, 45, 15)) GUICtrlSetStyle($aIconBLabels[$iButtonCount - 1], BitOR($SS_CENTER, $SS_CENTERIMAGE)) $iButtonPosLeft = $iButtonPosLeft + 50 If Mod($iButtonCount, 20) = 0 Then $iButtonPosTop = $iButtonPosTop + 70 $iButtonPosLeft = 10 EndIf ;retrieving Icons by positive position ;***************************************************************************************** ;$MessageTemp = GUICtrlSetImage($aIconButtons[$iButtonCount - 1], "shell32.dll", 1 * ($iButtonCount + $iIcnPosOffset) , 1) ;***************************************************************************************** If $iButtonCount < $iIconCt Then If BitAND($iButtonCount, 1) Then GUICtrlSendMsg($aIconButtons[$iButtonCount - 1], $BM_SETIMAGE, $IMAGE_ICON, DllStructGetData($tIconsLg, 1, $iButtonCount)) Else GUICtrlSendMsg($aIconButtons[$iButtonCount - 1], $BM_SETIMAGE, $IMAGE_ICON, DllStructGetData($tIconsSm, 1, $iButtonCount)) EndIf EndIf Next ;Destroy all the extracted icons ConsoleWrite("Destroying Icons" & @CRLF) For $i = 1 To $iIconCt _WinAPI_DestroyIcon(DllStructGetData($tIconsLg, 1, $i)) _WinAPI_DestroyIcon(DllStructGetData($tIconsSm, 1, $i)) Next ;============================================================================================================ ;GUI Loop ;============================================================================================================ While True ;------------------------------------------------------------------------------------------------------------ ;Get GUI-Messages ;------------------------------------------------------------------------------------------------------------ $nMsg = GUIGetMsg() If $nMsg = $GUI_EVENT_CLOSE Then ExitLoop ;------------------------------------------------------------------------------------------------------------ ;Get Traymenu Messages ;------------------------------------------------------------------------------------------------------------ Switch TrayGetMsg() Case $IdTrayMenuExit ;Exit. ExitLoop EndSwitch ;------------------------------------------------------------------------------------------------------------ WEnd EndFunc ;==>Main