关联文件图标要重启才能显示?

coolqiang 2000-01-16 03:21:00
在“文件夹选项\文件类型”中更改了某类文件的图标后,确定,能在目录中立刻看到该类文件图标已经改变,但我用Delphi编的修改注册表实现文件关联的程序,则必须重新启动电脑,方可看到图标的改变。或者运行我的程序后,在“文件夹选项\文件类型”中随便找文件类型打开,点“更改图标”,改动图标,之后确认返回,能发现该类文件图标改变,同时我的程序修改的文件类型的图标也能显示。综上所述,我认为,电脑重启或更改图标功能都会对注册表或系统进行一番刷新,使更改的图标立刻显示出来,那么,我要问的是:“如何通过代码实现这种立刻刷新,使我的程序一运行后,能立刻看到图标的变化”。希望高手指点!
...全文
253 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
光明山人 2000-01-19
  • 打赏
  • 举报
回复
我是从MSDN上摘的。:)

我也不太赞同Venne的写法,该函数在shlobj.pas中的原型是:
procedure SHChangeNotify(wEventId: Longint; uFlags: UINT;
dwItem1, dwItem2: Pointer); stdcall;

pascal中用Pointer的专访最好别用0,否则会出Warnings。与在C中不一样。因此最后两个参数应该写成nil。第二个参数用SHCNF_IDLIST也没错,MSDN中写的就是它。
Venne 2000-01-18
  • 打赏
  • 举报
回复
我是先用系统的文件设置将BMP的图标改为一个写字板的图标,然后修改注册表改回去,目的是解释shChangeNotify,这个函数可以做很多工作,但是我不太赞同AGUI后面带的参数,因为通知关联修改没有附加的参数,因此,FLAG设为参数为两个数值,因为没有用,使用了0。你可以试一下下面的代码,打开一个资源管理器,看看是如何工作的。其它参数如果你想要了解,可以写信给我,我才解释,这里就不贴了,注意在Uses部分加入ShlObj单元和Registry单元:
procedure TForm1.Button1Click(Sender: TObject);
var
RegAgent:TRegistry;
begin
RegAgent:=Tregistry.Create ;
regAgent.RootKey :=HKEY_LOCAL_MACHINE;
RegAgent.OpenKey ('\Software\CLASSES\Paint.Picture\DefaultIcon',false);
RegAgent.WriteString('','C:\Progra~1\Access~1\MSPAINT.EXE,1');
RegAgent.CloseKey ;
RegAgent.Free ;
ShChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_DWORD,0,0);
end;
coolqiang 2000-01-17
  • 打赏
  • 举报
回复
agui,能不能告诉我后面两个参数怎么用,我查看了Win32API的帮助,但还是不太懂!最好能写出具体的代码,谢谢!
光明山人 2000-01-16
  • 打赏
  • 举报
回复
试试这个:
在修改后调用这个函数:
WINSHELLAPI void WINAPI SHChangeNotify(
LONG wEventId,
UINT uFlags,
LPCVOID dwItem1,
LPCVOID dwItem2
);

wEventId = SHCNE_ASSOCCHANGED
A file type association has changed. SHCNF_IDLIST must be specified in the uFlags parameter. dwItem1 and dwItem2 are not used and must be NULL.

uFlags = SHCNF_IDLIST
dwItem1 and dwItem2 are the addresses of ITEMIDLIST structures that represent the item(s) affected by the change. Each ITEMIDLIST must be relative to the desktop folder.

更详细的请看MSDN,及多试几次。
祝你好运!
limodou 2000-01-16
  • 打赏
  • 举报
回复
好象不用吧。

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧