请问如何像“超级兔仔”那样删除和恢复开始菜单项后,无须重启,而达到刷新效果。(100分)

  • 主题发起人 主题发起人 haoel
  • 开始时间 开始时间
H

haoel

Unregistered / Unconfirmed
GUEST, unregistred user!
请问该如何刷新或是重载“开始菜单”。
 
not have to刷新
 
; “超级兔仔”是修改注册表来达到目的的,修改注册表后刷新注册表可以使注册表立刻生效,
命令:忘了自己找找
 
全部在这儿了:
我自己摸索和一位网友的答案。
SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST+SHCNF_FLUSH,nil,nil);//刷新文件关联图标
其中SHChangeNotify还有多个地方可以刷新(如文件删除,磁盘弹出等等),具体的看帮助!
SHChangeNotify(SHCNE_ALLEVENTS , SHCNF_FLUSH,nil,nil);//发生所有的事件,系统应该刷新响应的项目
function SHUpdateRecycleBinIcon():boolean;stdcall;external 'shell32.dll' name 'SHUpdateRecycleBinIcon';//刷新回收站图标
SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0);//通知系统设置改变
var
buf:pchar;
...
getmem(buf,SizeOfBuf);//
strpcopy(buf,'注册表的主键,例如Software/Microsoft/windows/currentversion/Explorer/ToolBar');
SendMessage(HWND_BROADCAST,WM_SETTINGCHANGE,0,buf);
//通知系统刷新响应的键值,如果前面的没有起作用,那么可以采用这个方法。
systemparametersinfo(SPI_SETDESKWALLPAPER,0,pchar(path),0);
//上面的是通知系统更改了墙纸,其中path为墙纸的路径。
同样,SystemParametersInfo()还可以对系统进行很多方面的刷新,例如更改了桌面的大小等等,你可以看看帮助,我不可能在这儿把所有的都写出来。

要做到象Tweak UI那样Rebuild ICON,可以采用下面的方法:
:delphifan
这个问题确实很有意思,害得我找了很久,请看答案:

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大小是一种可行的办法,
 
谢谢Kingron,你的程序是刷新图标区的,这个我早知道了。

虽然你的程序不是刷新菜单的,但是我还是把100分给你了,还是要谢谢你的。

希望以后常联系。
 
后退
顶部