如何Apply改过的系统图标?(50分)

  • 主题发起人 主题发起人 qixia
  • 开始时间 开始时间
Q

qixia

Unregistered / Unconfirmed
GUEST, unregistred user!
我要改一个系统图标(比如是共享目录的图标)我在注册表里改:
HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/explore/Shell Icons
把28的键值改成"C:/myicon.ico"。但连重新启动后也未生效。望指点如何令
其生效。
 
icon的大小和颜色数是否和原来的一样?
 
没人知道?
 
快来答呀,我加50分,决不食言
 
试试:
改过注册表后,
将c:/Windows/ShellIconCache这个文件删除。
直接按Reset或Power重起,不要用“关闭系统”那个对话框。
 
to o*o:这个方法确实能实现,但我想肯定有更安全的方法。
我RESET一下硬盘扫描出错。
 
呵呵,高!直接把原来那个REPLACE掉不行?
 
呵呵,CJ大侠都叫好了,在下实在荣幸。
REPLACE十有八九不中,会把图标都搞乱。
硬盘扫描出错跟这个RESET并没有必然的联系。
这个方法虽然编程可以实现,但过于简单加粗暴。
听听楼下的高手有没有更好的方法。
 
我用一个空的ShellIconCache去Replace,无效.
 
估计是这个:

SHChangeNotify(SHCNE_UPDATEIMAGE,...);

uses shlobj;
 
shchangenotify怎么用?
 
没有人知道?
 
这个问题不难吧?
 
难,我从未试成功过。
 
肯定是有办法的,它自己就可以,找找。
 
楼上和楼下的各位大虾,若有好的方法别忘了给我E-Mail一份啊,谢谢了!!!
 
这个问题确实很有意思,害得我找了很久,请看答案:

Reg := TRegistry.Create;
try
//设置图标
Reg.RootKey := HKEY_LOCAL_MACHINE;
if Reg.OpenKey('/Software/Microsoft/Windows/CurrentVersion/explorer/Shell Icons',True)
then Reg.WriteString('3','C:/WINDOWS/SYSTEM/shell32.dll,15');

//修改icon size
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('/Control Panel/Desktop/WindowMetrics', True)
then Reg.WriteString('Shell Icon Size','31');
//通知windows
SendMessage(
HWND_BROADCAST,
WM_SETTINGCHANGE,
0,
0);
//当然别忘了改回来
Reg.WriteString('Shell Icon Size','32');
SendMessage(
HWND_BROADCAST,
WM_SETTINGCHANGE,
0,
0);
finally
Reg.CloseKey;
Reg.Free;
end;

关键是强迫windows重新刷新 icon cache,通过修改icon大小是一种可行的办法,
虽不排除有其他办法,但试验了几个没通过,大家不妨多发掘一下.
 
略微改进一下,改小图标时,用
Reg.WriteString('Shell Icon Size','0');
比较好,显示起来没有变小又变大的闪烁

我已基本确认这是唯一可行的办法
 
我也找到了WM_SETTINGCHANGE,不过没试验。
 

Similar threads

后退
顶部