用Delphi实现文件关联

2016-01-29 14:17 17 1 收藏

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

【 tulaoshi.com - 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://www.tulaoshi.com/delphi/) 

来源:http://www.tulaoshi.com/n/20160129/1492949.html

延伸阅读
标签: Delphi
所谓文件切割,就是把一个文件切割成若干个小文件。做法就是将一个文件对象以"文件流"的方式读出,然后按照一定的块(Block)大小分别存成文件。文件组合,就是把若干个文件组合成一个文件。比如像打包工具(Wise)用到的就是这个原理。如果大家对"流"这个概念熟悉的话,那么实现起来就很容易了,以下就是实现步骤。 二、 实现 ...
标签: Delphi
在应用层面上,程序员可以通过保存在应用程序文件或动态链接库文件中的版本信息判断一个文件是否应该被安装,并确定当前安装文件的冲突。在文件有了版本信息这个属性后,我们编写的程序就能够实现以下功能: 1. 避免在新版本的组件上安装旧版本的相同组件; 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息...
标签: Delphi
用过一般的杀毒软件,都知道,启动程序时,常会问,网上已经有新版本的,是否升级之类的提示,现在越来越多的软件都支持在线升级,你是否也想实现这个功能?本文就如何实现在线升级,讲述一下如何通过HTTP检测是否需要下载升级版本,下载并升级。 实现步骤: 1、网站提供升级信息。 2、使用HTTP从网站下载升级信息。 ...
标签: Delphi
二、IP头结构 我们知道,TCP/IP网络数据全部是通过封装在IP数据包中在Internet网上传送的,也就是封装建立起一个包含IP头和数据的IP数据报。一般来说,网络软件总是以多个32位字产生IP头,即使必须用附加的0填充IP头。IP头包含了传输IP数据包中封装数据的所有必要信息。IP头的数据结构和描述如下: 成员长度(Bit)描述 Version4 ...
标签: Web开发
在WebDev站点上经常看到的一个问题是关于文件上传的。在这篇文章里我将解释如何用PHP实现文件 上传。 设计上传表格 我们主要的目标是完成文件从本地计算机上传到服务器上去。为了做到这一点,我们需要做一个表 格,允许用户选择一个文件并可以提交它。下面是一个例子: HTML HEAD TITLE文件上传表格/TITLE /HEAD BODY TABLE FORM E...

经验教程

588

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部