用Delphi实现文件关联

依小然Z

依小然Z

2016-01-29 14:17

用Delphi实现文件关联,用Delphi实现文件关联
 

  文件关联为我们带来很多的方便。Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容。

  Function GetAssociatedExec(FileExt: String; var FileDescription, MIMEType: String): String;

  Var Reg: TRegistry; FileType: String;

  begin

   Result := ′′;{函数返回值是打开FileExt文件的可执行程序的名字及其参数}

   Reg := TRegistry.Create;{创建注册表对象的实例}

   try

    Reg.RootKey := HKey—Classes—Root;{准备操作的注册表根键}

    if not Reg.OpenKey(FileExt, False) then Exit;{当传入的文件类型在注册表中不存在时退出,False表示FileExt键值不存在时不自动创建新键}

    FileType := Reg.ReadString(′′);{文件类型的简单描述}

    MIMEType := Reg.ReadString(′Content Type′);{内容MIME类型}

    Reg.CloseKey;{关闭当前关键字}

    if (FileType = ′′) or (not Reg.OpenKey(FileType, False)) then Exit;

    FileDescription := Reg.ReadString(′′);{内容类型的具体描述}

    if not Reg.OpenKey(′shellopencommand′, False) then Exit;{该键值保存由哪个程序、以什么参数打开FileExt类型的文件}

    Result := Reg.ReadString(′′);{读取该键值内容}

    Reg.CloseKey; finally

    Reg.Free;{释放对象实例}

   end; end;

  由上面的例程可知,首先在HKey—Classes—Root寻找与FileExt(文件后缀,带“.”)相匹配的主键,然后从“默认” 键名取得键值,然后以该键值作为主键取得FileExt的具体描述。在其子键shellopencommand中保存了由哪个程序、以什么参数打开FileExt类型的文件的信息,只要修改它的内容,就可以控制由哪个程序打开FileExt类型的文件。

  既然知道了文件关联在注册表中是如何定义的,只要反其道而行,就可以正确改变文件的关联了。

  function SetAssociatedExec(FileExt, Filetype, FileDescription,MIMEType,ExecName: String): Boolean;{修改成功,返回True,否则False}

  var Reg: TRegistry;

  begin

   Result := False;{}

   if (FileExt = ′′) or (ExecName = ′′) then Exit;{如果文件类型为空或者没有定义执行程序就退出,FileExt必须带″.″,如.BMP}

   Reg := TRegistry.Create;

   try

  Reg.RootKey := HKey—Classes—Root;

  if not Reg.OpenKey(FileExt, True) then Exit;{当不能正确找到或创建FileExt键时退出,这种情况一般是注册表有错误,以下同}

  Reg.WriteString(′′, FileType);

  if MIMEType < ′′ then Reg.WriteString(′Content Type′, MIMEType);

  Reg.CloseKey;

  if not Reg.OpenKey(FileType, True) then Exit;

  Reg.WriteString(′′, FileDescription);

  if not Reg.OpenKey(′shellopencommand′, True) then Exit;

  Reg.WriteString(′′, ExecName);{执行程序一般都有参数,例如WinZip的“winzip32.exe ″%1″”,″%1″参数指ZIP文件的文件名。因此ExecName应视情况加入参数}

  Reg.CloseKey;

   finally Reg.Free; end;

  end;

  写与读是一个性质相同、方向相反的过程,因此在SetAssociatedExec函数没有过多的说明,可以参考GetAssociatedExec函数。至于TRegistry的使用,限于篇幅,本文从略。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/delphi/) 
展开更多 50%)
分享

猜你喜欢

用Delphi实现文件关联

Delphi
用Delphi实现文件关联

用DELPHI实现文件加密压缩

编程语言 网络编程
用DELPHI实现文件加密压缩

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

用Delphi实现壁纸更换

编程语言 网络编程
用Delphi实现壁纸更换

用Delphi实现打印功能

Delphi
用Delphi实现打印功能

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用delphi操作INI文件

编程语言 网络编程
用delphi操作INI文件

Delphi“流”实现文件加密器

编程语言 网络编程
Delphi“流”实现文件加密器

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

用PHP发送MIME邮件(五)

用PHP发送MIME邮件(五)

《影之刃》常见问题解答

《影之刃》常见问题解答
下拉加载更多内容 ↓