J'ai vraiment aimé l'apparence de l'oxygène de KDE SC 4. J'ai écrit un programme pour appliquer ces icônes à Windows. Le programme est écrit dans NSIS et est actuellement presque entièrement fonctionnel. Cependant, le seul moyen que j'ai trouvé pour rendre Windows au courant des changements d'icône est de tuer explorer.exe, de supprimer le cache des icônes et de respawn explorer.exe. SHChangeNotify
avec SHCNE_ASSOCCHANGED
semble être incapable de rendre Windows au courant des changements apportés à l'icône du Panneau de configuration, l'icône Poste de travail, etc. Veuillez suggérer une meilleure approche, moins brutale, pour sensibiliser Windows à ces changements.Faire de Windows rafraîchir icône cache
EDIT: J'ai trouvé un programme appelé Icon Tweaker qui semble capable de faire cela, mais il est fermé et donc je n'ai aucune idée de comment cela fonctionne. (IconTweaker: http://www.crystalxp.net/galerie/en.id.83-icontweaker.html)
EDIT: Je l'ai bien fonctionné, grâce à la réponse de Anders (voir ci-dessous). Cependant, je vais mettre mon code NSIS de travail ici, au cas où quelqu'un d'autre a besoin, il
ReadRegStr $0 HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size"
IntOp $0 $0 + 1
WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0
SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000
IntOp $0 $0 - 1
WriteRegStr HKCU "Control Panel\Desktop\WindowMetrics" "Shell Icon Size" $0
SendMessage 0xffff 0x001A 42 0 /TIMEOUT=100000
Le registre $ 0 est utilisé pour stocker la valeur Shell Icon Size
de HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
. Nous incrémentons ensuite la valeur et effectuons un SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
, suivi d'une décrémentation et d'un nouvel envoi.
EDIT: En bonus, cela peut être utilisé comme un hack pour obtenir des icônes de bureau plus grandes (taille Windows 7) sur Windows XP. Il suffit de doubler la valeur Shell Icon Size
et appelez SendMessage
(ne pas effectuer le deuxième changement qui restaure la taille)
J'ai un problème similaire dans un programme C#.Avez-vous eu ce travail? –
Oui. Le code que j'ai posté ci-dessus (code NSIS) a fait l'affaire. –