Mi è piaciuta molto l'aspetto dell'ossigeno di KDE SC 4. Ho scritto un programma per applicare queste icone a Windows. Il programma è scritto in NSIS ed è attualmente quasi completamente funzionante. Tuttavia, l'unico modo che ho trovato per rendere Windows consapevole delle modifiche alle icone è uccidere explorer.exe, eliminare la cache delle icone e respawn explorer.exe. SHChangeNotify
con SHCNE_ASSOCCHANGED
sembra essere in grado di rendere Windows consapevole delle modifiche all'icona del Pannello di controllo, l'icona Risorse del computer, ecc. Si prega di suggerire un approccio migliore, meno brutale per rendere Windows consapevole di queste modifiche.Rendi Windows icona cache
EDIT: Ho trovato un programma chiamato Icon Tweaker che sembra essere in grado di farlo, ma è closed source e quindi non ho idea di come lo faccia. (IconTweaker: http://www.crystalxp.net/galerie/en.id.83-icontweaker.html)
MODIFICA: L'ho risolto correttamente, grazie alla risposta di Anders (vedere sotto). Tuttavia, mi limiterò a mettere il mio codice NSIS lavoro qui, nel caso in cui qualcuno ha bisogno altrimenti
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
Il registro $ 0 è usato per memorizzare il valore di Shell Icon Size
HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics
. Quindi incrementiamo il valore e facciamo un SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS, 0, SMTO_ABORTIFHUNG, 100000, NULL)
, seguito da un decremento e re-invio.
MODIFICA: Come bonus, questo può essere usato come un trucco per ingrandire le icone del desktop (Windows 7) su Windows XP. Basta raddoppiare il valore Shell Icon Size
e chiamare SendMessage
(non eseguire la seconda cambiamento che ripristina la dimensione)
Ho un problema simile in un programma C#.Hai funzionato? –
Sì. Il codice che ho postato sopra (codice NSIS) ha fatto il trucco. –