Me gustó mucho la apariencia de oxígeno de KDE SC 4. Escribí un programa para aplicar estos íconos a Windows. El programa está escrito en NSIS, y actualmente es casi completamente funcional. Sin embargo, la única forma que encontré para que Windows tenga conocimiento de los cambios del icono es matar a explorer.exe, eliminar el caché de íconos y reaparecer explorer.exe. SHChangeNotify
con SHCNE_ASSOCCHANGED
parece ser incapaz de hacer que Windows tenga conocimiento de los cambios en el icono del Panel de control, el ícono de Mi PC, etc. Sugiera un enfoque mejor y menos brutal para que Windows esté al tanto de estos cambios.Make Windows refresh icon cache
EDIT: Encontré un programa llamado Icon Tweaker que parece ser capaz de hacer esto, pero es de código cerrado, así que no tengo idea de cómo lo hace. (IconTweaker: http://www.crystalxp.net/galerie/en.id.83-icontweaker.html)
EDIT: Esto funciona bien, gracias a la respuesta de Anders (ver a continuación). Sin embargo, Voy a poner mi código NSIS trabajo aquí, en caso de que alguien más lo necesita
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
El registro $ 0 se utiliza para almacenar el valor de Shell Icon Size
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
. A continuación, incrementamos el valor y hacemos un SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
, seguido de una disminución y un nuevo envío.
EDITAR: Como una ventaja, esto se puede utilizar como un truco para obtener iconos de escritorio más grandes (tamaño de Windows 7) en Windows XP. Justo el doble del valor Shell Icon Size
y llame SendMessage
(no realice el segundo cambio que restaura el tamaño)
Tengo un problema similar en un programa en C#.¿Lo hiciste funcionar? –
Sí. El código que publiqué arriba (código NSIS) fue el truco. –