文件关联为我们带来很多的方便。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(′shell\open\command′, False) then Exit;{该键值保存由哪个程序、以什么参数打开FileExt类型的文件}

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

    Reg.CloseKey; finally

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

   end; end;

  由上面的例程可知,首先在HKey—Classes—Root寻找与FileExt(文件后缀,带“.”)相匹配的主键,然后从“默认” 键名取得键值,然后以该键值作为主键取得FileExt的具体描述。在其子键shell\open\command中保存了由哪个程序、以什么参数打开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(′shell\open\command′, True) then Exit;

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

  Reg.CloseKey;

   finally Reg.Free; end;

  end;

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

用Delphi实现文件关联的更多相关文章

  1. Delphi实现文件关联

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

  2. Delphi的文件操作(定义,关联,打开,读写,关闭)

    参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...

  3. Delphi的文件操作

    参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...

  4. delphi关于文件操作集锦

        关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...

  5. delphi资源文件的使用

    delphi资源文件的使用 资源文件(*.res)通过编译指令 $R 关联, 譬如工程文件 Project1 中的 {$R *.res} 就是关联 Project1.res 资源文件, 我们直接写作 ...

  6. VC++6.0文件关联问题的解决方法

    最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.& ...

  7. windows文件关联、打开方式列表之修改注册表攻略

    这里全是修改注册表的方式.网上找了半天,有的仅有添加文件关联的方法,却没有添加到打开方式列表里面的方法:有的有添加到文件列表的方法,却是使 用控制面板->文件夹选项的.好难得才找齐所有,从添加文 ...

  8. Ubuntu修改文件关联

    * 在system setting>details中可以设置一部分文件关联,很弱很破. * 右键open with只能临时选择打开方式,并且可选的打开方式十分有限.如果是自己编的程序,在列表中没 ...

  9. (转)Delphi工程文件说明

    1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...

随机推荐

  1. wordpress自定义栏目

    开启自定义栏目:点击头顶的“显示选项”,勾选“自定义栏目” 然后编辑文章时,即可看见 实验: 定义名称为:play_url ,值为:http://www.xiami.com/widget/635357 ...

  2. iOS8 Size Classes的理解与使用

    在iOS8中,新增了Size Classes特性,它是对当前所有iOS设备尺寸的一个抽象,也是该抽象了,想想现在多少种iOS尺寸的设备吧:iPhone4-5-6-6plus.iPad.iPad min ...

  3. MyBatis学习总结_01_MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  4. Eclipse中使用正则表达式搜索替换

    Eclipse中使用正则表达式搜索替换 分类:software | 标签: 正则表达  替换  eclipse  2011-11-29 11:28 阅读(1930)评论(0)编辑删除 最近在eclip ...

  5. jsp %EF%BB%BF

    utf-8 bom 问题,页面中存在不可忽略的空白,去掉即可 很微妙的一个空格,不易发现

  6. ubuntu12.10升级至14.04

    之前执行apt-get 不管是什么软件或apt-get update都会遇到fail to fetch http://us.archive.ubuntu.com quantal-updates/mai ...

  7. SpringMVC结合ajaxfileupload.js实现文件无刷新上传

    直接看代码吧,注释都在里面 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-ap ...

  8. Tomcat配置https及访问http自动跳转至https

    https介绍:   HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全 ...

  9. IntelliJ IDEA12.1.1 使用 相关记录

    最近在切换ide 从eclipse平台上转移到   IDEA 其它的都比较容易,让我烦恼的是使用idea 发布工程,使用tomcat 调试 热部署.期间碰到各种问题,纠结好久了:终于成功完成了,特意记 ...

  10. 虚拟机 主机无法访问虚拟机中Linux上的tomcat服务

    在wmware中安装linux后安装好数据库,JDK及tomcat后启动服务,虚拟机中可以访问,但是主机却无法访问,但是同时主机和虚拟机之间可以ping的通,网上查阅资料后,解决方法是关闭虚拟机中的防 ...