2010-07-14 3 views
5

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)

+0

J'ai un problème similaire dans un programme C#.Avez-vous eu ce travail? –

+0

Oui. Le code que j'ai posté ci-dessus (code NSIS) a fait l'affaire. –

Répondre

5

SystemParametersInfo() a un paramètre appelé SPI_SETICONS que « les icônes rechargements du système », selon MSDN. Je ne l'ai jamais essayé d'utiliser SPI_SETICONS donc je ne sais pas si cela fonctionne, si vous vouliez vous tester utiliser quelque chose comme

System::Call 'user32::SystemParametersInfo(i 0x0058,i0,i0,i2)i' ;SPI_SETICONS 

S'il se trouve que cela ne suffit pas, vous pouvez faire ressortir le grand marteau sans papier:

  1. Lire la valeur REG_SZ nommée "Taille Shell icône" dans HKEY_CURRENT_USER \ Control Panel \ Desktop \ WindowMetrics (Si la valeur est pas là, que ce soit abandonniez ou utilisation (SM_CXICON) GetSystemMetrics)
  2. Soustraire 1 de le numéro que vous avez reçu à la première étape
  3. Ecrire l'arrière entrée modifiée au registre
  4. Appel SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
  5. Écrivez le numéro que vous avez obtenu à l'étape une entrée de retour au Registre
  6. Appel SendMessageTimeout (HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)

Notez que cela pourrait réarranger les icônes du bureau, même si "Réorganiser Auto" est désactivé et peut-être d'autres choses qui pourraient gêner l'utilisateur!

+1

@Sudarshan S: ReadRegStr, IntOp, WriteRegStr, SendMessage 0xffff 0x001A 42 0/TIMEOUT = 100000 sont toutes les commandes intégrées, System :: Call 'user32 :: GetSystemMetrics (i 11) i.r0' vous donnera la taille SM_CXICON dans $ 0 – Anders

4

Vous pouvez simplement exécuter la ligne de commande suivante:

c:\Windows\System32\ie4uinit.exe -ClearIconCache 

Cette ligne de commande supprimera vos icônes de cache sans avoir besoin de redémarrer l'explorateur

+0

Vous ne savez pas ce que cela fait, mais il n'efface pas le cache d'icônes. – user3690202

Questions connexes