从别的站点转载的,并不是直接解决。不过也应该可以触类旁通吧。编程实现文件关联(2000年8月21日)  作者:srw文件关联的目的是要实现某种扩展名的文件由相应的应用程序
来打开,对于编写的应用软件来说,由于一般都有设计者特定的扩
展名的数据文件,软件编制者应在程序中实现自动关联而不能由用
户手工去实现。下面给出实现文件关联的实用程序。----实现文件关联的核心是对注册表的操作,所有的文件关联都在
HKEY-CLASSES-ROOT下面,要实现文件关联必须在HKEY-
CLASSES-ROOT中增加两个键值,一是和文件扩展名对应的类型说
明,二是对这种类型文件的操作所需要执行的应用程序。下面举例
说明,本例实现将扩展名为.xyz的文件定义为"我自己的文件"类
型,双击此种类型的文件时执行的打开功能使用记事簿程序。实现
这一功能需要用到Delphi中的函数RegCreateKey、RegSetValue。实
现如下:----在窗体中放置一个按钮,双击按钮写如下代码:procedureTForm1.Button1Click(Sender:TObject);
var
lphKey:HKEY;
sKeyName:string;
sKeyValue:string;
begin
sKeyName:=′myfile′;
sKeyValue:=′我的文档′;
RegCreateKey(HKEY-CLASSES-ROOT,
pchar(sKeyName),lphKey);
RegSetValue(lphKey,′′,REG-SZ,
pchar(sKeyValue),0);
sKeyName:=′.xyz′;
sKeyValue:=′myfile′;
RegCreateKey(HKEY-CLASSES-ROOT,
pchar(sKeyName),lphKey);
RegSetValue(lphKey,′′,REG-SZ,
pchar(sKeyValue),0);
sKeyName:=′myfile′;
sKeyValue:=′c:\Windows\NotePad.exe%1′;
RegCreateKey(HKEY-CLASSES-ROOT,
pchar(sKeyName),lphKey);
RegSetValue(lphKey,′shell\open\command′,REG-SZ,
pchar(sKeyValue),MAX-PATH);
end;----建立一新文件,使其扩展名为.xyz,然后双击它看是否是启动
记事簿来打开的。  

解决方案 »

  1.   

    呵呵,这个问题我在网上也问过,不过要求更高一点,要求刷新整个系统,不只是图标,不过没人回答。自己找到了答案:SHChangeNotify。
    SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST,nil,nil);
    用sendmessage,postmessage也可以。呵呵,又拿了N分。
      

  2.   

    呵呵,这个问题我在网上也问过,不过要求更高一点,要求刷新整个系统,不只是图标,不过没人回答。自己找到了答案:SHChangeNotify。记得要uese shlobj.
    SHChangeNotify(SHCNE_ASSOCCHANGED,SHCNF_IDLIST+SHCNF_FLUSH,nil,nil);
    用sendmessage,postmessage也可以。呵呵,又拿了N分。