如何实现MagicSet等类似软件的刷新图标功能。即将windows图标缓冲的内容重新生成一遍(50分)

  • 主题发起人 主题发起人 lml
  • 开始时间 开始时间
L

lml

Unregistered / Unconfirmed
GUEST, unregistred user!
希望给出简单的代码
 
我也想要<br>
 
没有人知道吗?
 
知道但是懒的写了建议去看看MSDN了<br>WINDOWS的图标是有索引的
 
1)我想你是不是可以这样做改完图标后del shelliconcache 后 倒出注册表。后在导入注册表<br><br>就可以了。<br>2)用api 立刻重启
 
都不是满意的答案。
 
ShChangeNotify()<br>Sendmessage(wm_settingchange,.....)
 
删除windows目录下ShellIconCache文件(图标缓存),然后重起。
 
找到了:<br>SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST+SHCNF_FLUSH,nil,nil);//刷新文件关联图标<br>其中SHChangeNotify还有多个地方可以刷新,具体的看帮助!<br>SHChangeNotify(SHCNE_ALLEVENTS , SHCNF_FLUSH,nil,nil);//发生所有的事件,系统应该刷新响应的项目<br>function SHUpdateRecycleBinIcon():boolean;stdcall;external 'shell32.dll' name 'SHUpdateRecycleBinIcon';//刷新回收站图标<br>SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);//通知系统设置改变<br>var<br>buf:pchar;<br>...<br>getmem(buf,SizeOfBuf);//<br>strpcopy(buf,'注册表的主键,例如Software/Microsoft/windows/currentversion/Explorer/ToolBar');<br>SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,buf);<br>//通知系统刷新响应的键值,如果前面的没有起作用,那么可以采用这个方法。<br>systemparametersinfo(SPI_SETDESKWALLPAPER,0,pchar(path),0);<br>//上面的是通知系统更改了墙纸,其中path为墙纸的路径。<br>同样,SystemParametersInfo()还可以对系统进行很多方面的刷新,例如更改了桌面的大小等等,你可以看看帮助,我不可能在这儿把所有的都写出来。<br><br>要做到象Tweak UI那样Rebuild ICON,可以采用下面的方法:<br>:delphifan <br>这个问题确实很有意思,害得我找了很久,请看答案:<br><br>&nbsp; Reg := TRegistry.Create;<br>&nbsp; try<br>&nbsp; &nbsp; //设置图标<br>&nbsp; &nbsp; Reg.RootKey := HKEY_LOCAL_MACHINE;<br>&nbsp; &nbsp; if Reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/explorer/Shell Icons',True) then <br>&nbsp; &nbsp; &nbsp; Reg.WriteString('3','C:/WINDOWS/SYSTEM/shell32.dll,15');<br>&nbsp; &nbsp; //修改icon size<br>&nbsp; &nbsp; Reg.RootKey := HKEY_CURRENT_USER;<br>&nbsp; &nbsp; if Reg.OpenKey('/Control Panel/Desktop/WindowMetrics', True)<br>&nbsp; &nbsp; then Reg.WriteString('Shell Icon Size','31');<br>&nbsp; &nbsp; //通知windows<br>&nbsp; &nbsp; SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);<br>&nbsp; &nbsp; //当然别忘了改回来<br>&nbsp; &nbsp; Reg.WriteString('Shell Icon Size','32');<br>&nbsp; &nbsp; SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,0);<br>&nbsp; finally<br>&nbsp; &nbsp; Reg.CloseKey;<br>&nbsp; &nbsp; Reg.Free;<br>&nbsp; end;<br><br>关键是强迫windows重新刷新 icon cache,通过修改icon大小是一种可行的办法,<br>
 
&lt;p align="left"&gt;<br>&lt;font color="#FF0000"&gt;<br>大家帮帮忙,给看一下&lt;/font&gt;&lt;/p&gt;<br><br>&lt;p align="left"&gt;<br>&amp;nbsp;<br>&lt;font color="#FF0000" size="4"&gt;<br>&lt;a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=506445"&gt;<br>“寻找简单的方法,filter消息”&lt;/a&gt;<br>&lt;/font&gt;&lt;/p&gt;<br><br>&lt;p align="left"&gt;如有违反论坛规则,还请版主砍掉并批评指出&lt;/p&gt;
 
后退
顶部