Code : Tout sélectionner
#include <WinAPI.au3>
Local $window = "[CLASS:ApolloRuntimeContentWindow]"
Local $file1 = @ScriptDir&"\Test1.ico"
Local $file2 = @ScriptDir&"\Test2.ico"
WinSetIcon($window, $file1)
MsgBox(0, "Contenu du fichier TEMP", FileRead(WinIcons_file()))
WinSetIcon($window, $file2)
MsgBox(0, "Contenu du fichier TEMP", FileRead(WinIcons_file()))
WinCleanIcons()
MsgBox(0, "Contenu du fichier TEMP", FileRead(WinIcons_file()))
WinClose($window)
WinCleanIcons()
MsgBox(0, "Contenu du fichier TEMP", FileRead(WinIcons_file()))
; Nom du fichier contenant les données
Func WinIcons_file()
Return @TempDir&"\"&"WinIcons_file.ini"
EndFunc
; Fonction de récupération de l'icone attribuée à une fenêtre
Func WinGetIcon($window)
Local $handle = WinGetHandle($window)
If $handle = 0 Then Return False
If Not IsDeclared("WINICONS") Then Global $WINICONS[1][2] = [[0]]
If Not FileExists(WinIcons_file()) Then FileClose(FileOpen(WinIcons_file(),10))
Return Number(IniRead(WinIcons_file(), "WinIcons", "WIN_"&WinGetHandle($handle), ""))
EndFunc
; Fonction d'attribution d'icone à une fenêtre
Func WinSetIcon($window, $file)
Local $handle = WinGetHandle($window)
If $handle = 0 Then Return False
If Not IsDeclared("WINICONS") Then Global $WINICONS[1][2] = [[0]]
If Not FileExists(WinIcons_file()) Then FileClose(FileOpen(WinIcons_file(),10))
If IsString($file) Then
Local $found = 0
For $i = 1 To $WINICONS[0][0]
If StringUpper($file) = $WINICONS[$i][0] Then
$found = $i
ExitLoop
EndIf
Next
If $found = 0 Then
$WINICONS[0][0] = $WINICONS[0][0] + 1
ReDim $WINICONS[$WINICONS[0][0]+1][2]
$WINICONS[$WINICONS[0][0]][0] = StringUpper($file)
$WINICONS[$WINICONS[0][0]][1] = _WinAPI_LoadImage(0, $file, $IMAGE_ICON, 32, 32, BitOR($LR_LOADFROMFILE, $LR_CREATEDIBSECTION))
$found = $WINICONS[0][0]
EndIf
_SendMessage($handle, 0x0080, 1, $WINICONS[$found][1]) ; $WM_SETICON = 0x0080
IniWrite(WinIcons_file(), "WinIcons", "WIN_"&WinGetHandle($handle), $WINICONS[$found][1])
Else
_SendMessage($handle, 0x0080, 1, $file) ; $WM_SETICON = 0x0080
IniWrite(WinIcons_file(), "WinIcons", "WIN_"&WinGetHandle($handle), $file)
EndIf
EndFunc
; Fonction de restauration de l'icone attribuée à une fenêtre
Func WinRestoreIcon($window)
Local $handle = WinGetHandle($window)
If $handle = 0 Then Return False
If Not IsDeclared("WINICONS") Then Global $WINICONS[1][2] = [[0]]
If Not FileExists(WinIcons_file()) Then FileClose(FileOpen(WinIcons_file(),10))
Local $icon = WinGetIcon($handle)
If $icon Then _SendMessage($handle, 0x0080, 1, $icon) ; $WM_SETICON = 0x0080
Return ($icon <> 0)
EndFunc
; Fonction de réinitialisation de l'icone attribuée à une fenêtre
Func WinResetIcon($window)
Local $handle = WinGetHandle($window)
If $handle = 0 Then Return False
If Not IsDeclared("WINICONS") Then Global $WINICONS[1][2] = [[0]]
If Not FileExists(WinIcons_file()) Then FileClose(FileOpen(WinIcons_file(),10))
IniDelete(WinIcons_file(), "WinIcons", "WIN_"&$handle)
_SendMessage($handle, 0x0080, 0, 0) ; $WM_SETICON = 0x0080
Return True
EndFunc
; Fonction de nettoyage de la liste des icones attribuées à des fenêtres
Func WinCleanIcons()
If Not IsDeclared("WINICONS") Then Global $WINICONS[1][2] = [[0]]
If Not FileExists(WinIcons_file()) Then FileClose(FileOpen(WinIcons_file(),10))
Local $keys = IniReadSection(WinIcons_file(), "WinIcons")
If Not @error Then
For $i = 1 To $keys[0][0]
Local $handle = Number(StringTrimLeft($keys[$i][0], StringLen("WIN_")))
If $handle <= 0 Or Not WinExists($handle) Then IniDelete(WinIcons_file(), "WinIcons", $keys[$i][0])
Next
EndIf
EndFunc