怎么在更改完文件关联之后刷新桌面图标缓存
如何在更改完文件关联之后刷新桌面图标缓存?
RT,在注册表中更改完相应的键值之后,双击桌面上的某类文件(如.htm)时已经能用特定的程序打开(如Chrome),但是桌面上.htm文件的图标依然是ie的图标而非Chrome的。
我试过使用SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);和SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS,NULL);但是都不管用,可如果我重启explorer的话,图标能够刷新过来。
请问有什么方法能及时把桌面上的图标缓存给刷新过来么,谢啦。
------解决方案--------------------
RT,在注册表中更改完相应的键值之后,双击桌面上的某类文件(如.htm)时已经能用特定的程序打开(如Chrome),但是桌面上.htm文件的图标依然是ie的图标而非Chrome的。
我试过使用SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);和SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETNONCLIENTMETRICS,NULL);但是都不管用,可如果我重启explorer的话,图标能够刷新过来。
请问有什么方法能及时把桌面上的图标缓存给刷新过来么,谢啦。
------解决方案--------------------
- C/C++ code
////////////////////// //Rebuild Icon Cache// ////////////////////// int Iconw=GetSystemMetrics(SM_CXICON); HKEY hKey; RegOpenKeyEx(HKEY_CURRENT_USER, "Control Panel\\Desktop\\WindowMetrics ",0,KEY_ALL_ACCESS,&hKey); char buff[20]; itoa(Iconw-1,buff,10); RegSetValueEx(hKey, "Shell Icon Size ",0,REG_SZ,(unsigned char *)buff,sizeof(buff)); SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0); itoa(Iconw,buff,10); RegSetValueEx(hKey, "Shell Icon Size ",0,REG_SZ,(unsigned char *)buff,sizeof(buff)); SendMessage(HWND_BROADCAST,WM_WININICHANGE,0,0);