修改文件夹图标,就像快捷方式,如何不重启explorer使其自动显示?

时间:2022-02-25 21:35:46
我自己写了个小程序,在文件夹图标的左下角加了个自己的小图标,点击自定义的右键菜单时,更换左下角的这个小图标,可是我使用SHChangeNotify,查了一些资料,换了好多参数,也没出来效果,网上有朋友使用下面的一段程序:
HKEY   hKey;  
struct   HKEY__*RootKey;  
TCHAR   *SubKey;  
DWORD   dwType=REG_SZ;  
DWORD   dwLength = 256;  
TCHAR   *ValueName;  
LPBYTE   SetContent_S;  
RootKey=HKEY_CURRENT_USER;                                                                                  
SubKey="Control Panel\\Desktop\\WindowMetrics";    
char   content[256];  
ValueName="Shell Icon Size";  
RegOpenKeyEx(RootKey,SubKey,0,KEY_READ,&hKey);  
RegQueryValueEx(hKey, ValueName, NULL, &dwType, (unsigned char *)content, &dwLength);
RegCloseKey(hKey);  
RootKey=HKEY_CURRENT_USER;  
SubKey="Control Panel\\Desktop\\WindowMetrics";  
ValueName="Shell Icon Size";  
SetContent_S=LPBYTE("31");  
RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);  
RegSetValueEx(hKey,ValueName,NULL,REG_SZ,SetContent_S,strlen((char *)SetContent_S)); 
RegCloseKey(hKey);  
SendMessageTimeout(HWND_BROADCAST,WM_ICONERASEBKGND, SPI_SETNONCLIENTMETRICS,0,SMTO_ABORTIFHUNG,5000,NULL);  
SetContent_S=LPBYTE(content);  
RegOpenKeyEx(RootKey,SubKey,0,KEY_WRITE,&hKey);  
RegSetValueEx(hKey,ValueName,NULL,REG_SZ,SetContent_S,strlen((char *)(SetContent_S))); 
RegCloseKey(hKey);  
SendMessageTimeout(HWND_BROADCAST,WM_ICONERASEBKGND, SPI_SETNONCLIENTMETRICS,0,SMTO_ABORTIFHUNG,5000,NULL);

不过一直不理解SetContent_S=LPBYTE("31")中31是什么意思,也有的人用24。
请教高手,有没有什么办法不重启explorer就可以刷新的?

5 个解决方案

#1


作 用:改变图标大小 
路 径:HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics 
键值名称:"Shell Icon Size" 
键 值:改变其值即改变图标大小,缺省值为"32" 

#2


好像有个函数,通知系统注册表修改了

#3


SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL); //1
SHChangeNotify(SHCNE_UPDATEIMAGE,SHCNF_DWORD,NULL,NULL);    //2
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, pathname, NULL); //3
//在资源管理器中使用命令时
//1 2组合,只能刷新右侧
//2 3组合,只能刷新左侧
//1 3组合,可以两侧都刷新
我这里测试的是以上的结果,不知道对你有没有帮助

#4


你贴了代码的我没这里没测试成功,呵呵

#5


引用 3 楼 jnkandy 的回复:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL); //1
SHChangeNotify(SHCNE_UPDATEIMAGE,SHCNF_DWORD,NULL,NULL);    //2
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, pathname, NULL); //3
//在资源管理器中使用命令时
//1 2组合,只能刷新右侧
//2 3组合,只能刷新左侧
//1 3组合,可以两侧都刷新
我这里测试的是以上的结果,不知道对你有没有帮助

解决,呵呵

#1


作 用:改变图标大小 
路 径:HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics 
键值名称:"Shell Icon Size" 
键 值:改变其值即改变图标大小,缺省值为"32" 

#2


好像有个函数,通知系统注册表修改了

#3


SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL); //1
SHChangeNotify(SHCNE_UPDATEIMAGE,SHCNF_DWORD,NULL,NULL);    //2
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, pathname, NULL); //3
//在资源管理器中使用命令时
//1 2组合,只能刷新右侧
//2 3组合,只能刷新左侧
//1 3组合,可以两侧都刷新
我这里测试的是以上的结果,不知道对你有没有帮助

#4


你贴了代码的我没这里没测试成功,呵呵

#5


引用 3 楼 jnkandy 的回复:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST,NULL,NULL); //1
SHChangeNotify(SHCNE_UPDATEIMAGE,SHCNF_DWORD,NULL,NULL);    //2
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH | SHCNF_FLUSHNOWAIT, pathname, NULL); //3
//在资源管理器中使用命令时
//1 2组合,只能刷新右侧
//2 3组合,只能刷新左侧
//1 3组合,可以两侧都刷新
我这里测试的是以上的结果,不知道对你有没有帮助

解决,呵呵