[Ex] WinSetIcon

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

[Ex] WinSetIcon

#1

Message par mikell »

Suite à ce sujet : http://www.autoitscript.fr/forum/viewto ... =3&t=10897
Voilà l'exemple d'une petite fonction qui permet de changer l'icone de la barre de titre d'une fenêtre d'application non-autoit

Code : Tout sélectionner

#include <WinAPI.au3>

ShellExecute(StringRegExpReplace(@Autoitexe, '(.+)\\[^\\]+', "$1") & "\AutoIt.chm")
Do
  Sleep(10)
Until WinExists("AutoIt Help") 
$handle = WinGetHandle("AutoIt Help") 

; $ico = @scriptdir & "\autoitfr.ico"
; _WinSetIcon($handle, $ico)

_WinSetIcon($handle, "shell32.dll", 137)

WinSetTitle($handle, "", "AutoIt Help with niou icone") 

;=========================================
Func _WinSetIcon($hwnd, $file, $index = 0) 
    Local $tIcons = DllStructCreate("ptr Data")
    DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $file, "int", $index, "struct*", 0, "struct*", $tIcons, "uint", 1)
    If @error Then Return SetError(1, 0, 0)
    Local $hicon = DllStructGetData($tIcons, "Data")
   _SendMessage($hwnd, 0x0080, 1, $hicon ) ;$WM_SETICON = 0x0080
   _WinAPI_DestroyIcon($hicon)
EndFunc
 
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
matwachich
Membre émérite
Membre émérite
Messages : 986
Enregistré le : lun. 19 oct. 2009 04:04
Localisation : Algérie
Status : Hors ligne

Re: [Ex] WinSetIcon

#2

Message par matwachich »

mmm j'aime!
Je la garde à porté de main celle-la.

PS: Je vais juste la modifié pour ne pas être dépendante de WinAPI
PS2: niou icone :lol:
Sortons VW du coté obscure! - La curiosité est un vilain défaut! Cliquez ici
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

Re: [Ex] WinSetIcon

#3

Message par ZDS »

Bonjour,

Juste une retouche car un bug est présent si on détruit l'icone directement. Un simple Sleep(250) fait l'affaire (sinon, pixelisation de l'icone en 16x16 quand elle est affichée en 32x32 dans la barre des tâches) :

Code : Tout sélectionner

Func _WinSetIcon($hwnd, $file, $index = 0) 
    Local $tIcons = DllStructCreate("ptr Data")
    DllCall("shell32.dll", "uint", "ExtractIconExW", "wstr", $file, "int", $index, "struct*", 0, "struct*", $tIcons, "uint", 1)
    If @error Then Return SetError(1, 0, 0)
    Local $hicon = DllStructGetData($tIcons, "Data")
   _SendMessage($hwnd, 0x0080, 1, $hicon ) ;$WM_SETICON = 0x0080
   Sleep(250)
   _WinAPI_DestroyIcon($hicon)
EndFunc
► Afficher le texteAutre version pour un fichier *.ico en chemin direct
A bientôt; et encore merci :)
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [Ex] WinSetIcon

#4

Message par jguinch »

Peut-être plus simple : mettre le _WinAPI_DestroyIcon en sortie de script ? (mais je ne sais pas si ça peut avoir une incidence sur le reste..
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Répondre