Initialise ou réinitialise la liste d'images du système
#include <WinAPIIcons.au3>
_WinAPI_FileIconInit ( [$bRestore = True] )
$bRestore | [optionnel] Spécifie s'il faut restaurer le cache d'image système, les valeurs valides sont: True - Restaure le cache d'image système à partir du disque (par défaut). False - Ne restaure pas. |
Succès: | Retourne 1. |
Échec: | Retourne 0 et définit @error <> 0. |
Si vous utilisez des listes d'images système dans votre propre processus, vous devez appeler cette fonction au lancement de l'application, et en réponse à un message WM_SETTINGCHANGE lorsque le flag $SPI_SETNONCLIENTMETRICS est levé.
Consultez FileIconInit dans la librairie MSDN.
#include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <SendMessage.au3> #include <StaticConstants.au3> #include <WinAPIGdi.au3> #include <WinAPIGdiDC.au3> #include <WinAPIHObj.au3> #include <WinAPIIcons.au3> #include <WinAPIShPath.au3> ; Initialisation la liste d'images système _WinAPI_FileIconInit() ; Récupére la liste d'image système et calcule la taille du bitmap Local $hImageList = _WinAPI_ShellGetImageList() If @error Then Exit Local $iCount = _GUIImageList_GetImageCount($hImageList) Local $a_iSize = _GUIImageList_GetIconSize($hImageList) Local $iCX = Sqrt($iCount) Local $iCY If $iCX Then $iCX = Ceiling($iCX) $iCY = Ceiling($iCount / $iCX) Else $iCX = 1 $iCY = 1 EndIf Local $W = $iCX * ($a_iSize[0] + 14) Local $H = $iCY * ($a_iSize[1] + 14) ; Crée une GUI Local $hForm = GUICreate('Test ' & StringReplace(@ScriptName, '.au3', '()'), $W, $H) Local $idPic = GUICtrlCreatePic('', 0, 0, $W, $H) Local $hPic = GUICtrlGetHandle($idPic) ; Crée un bitmap Local $hDC = _WinAPI_GetDC($hPic) Local $hMemDC = _WinAPI_CreateCompatibleDC($hDC) Local $hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $W, $H) Local $hMemSv = _WinAPI_SelectObject($hMemDC, $hBitmap) ; Dessine toutes les icônes de la liste d'images système dans un bitmap Local $iIndex = 0 For $y = 1 To $iCY For $x = 1 To $iCX _GUIImageList_Draw($hImageList, $iIndex, $hMemDC, ($x - 1) * ($a_iSize[0] + 14) + 7, ($y - 1) * ($a_iSize[0] + 14) + 7) $iIndex += 1 If $iIndex >= $iCount Then ExitLoop EndIf Next Next ; Libère les objets _WinAPI_ReleaseDC($hPic, $hDC) _WinAPI_SelectObject($hMemDC, $hMemSv) _WinAPI_DeleteDC($hMemDC) ; Définit le bitmap dans le contrôle Picture _SendMessage($hPic, $STM_SETIMAGE, 0, $hBitmap) Local $hObj = _SendMessage($hPic, $STM_GETIMAGE) If $hObj <> $hBitmap Then _WinAPI_DeleteObject($hBitmap) EndIf ; Affiche la GUI GUISetState(@SW_SHOW) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE