用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(′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实现文件关联的更多相关文章
- Delphi实现文件关联
文件关联为我们带来很多的方便.Delphi自带有注册表对象TRegistry,可以通过它取得或改变注册表相关键值的内容. Function GetAssociatedExec(FileExt: Str ...
- Delphi的文件操作(定义,关联,打开,读写,关闭)
参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...
- Delphi的文件操作
参考自:http://www.cnblogs.com/railgunman/articles/1800318.html Delphi 中默认有input 和 output 两个文件变量,使用可以不用定 ...
- delphi关于文件操作集锦
关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...
- delphi资源文件的使用
delphi资源文件的使用 资源文件(*.res)通过编译指令 $R 关联, 譬如工程文件 Project1 中的 {$R *.res} 就是关联 Project1.res 资源文件, 我们直接写作 ...
- VC++6.0文件关联问题的解决方法
最近我的电脑*.c文件关联失败,无法实现双击*.c打开vc++6.0,感觉特别不爽. 在经过自己的琢磨研究后,终于找到了解决方法. 特此分享下,希望可以帮到遇到同样问题的你. 核心内容: 1.& ...
- windows文件关联、打开方式列表之修改注册表攻略
这里全是修改注册表的方式.网上找了半天,有的仅有添加文件关联的方法,却没有添加到打开方式列表里面的方法:有的有添加到文件列表的方法,却是使 用控制面板->文件夹选项的.好难得才找齐所有,从添加文 ...
- Ubuntu修改文件关联
* 在system setting>details中可以设置一部分文件关联,很弱很破. * 右键open with只能临时选择打开方式,并且可选的打开方式十分有限.如果是自己编的程序,在列表中没 ...
- (转)Delphi工程文件说明
1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...
随机推荐
- Delphi对于控件的SuperClassing(封装并扩展Button,使之变成TButton)
写博客写了这么久,但是一直不知道应该怎么样写函数之间的调用关系和执行顺序,因为不停的跳来跳去的,但是写的时候却只能顺序写调用关系,直到今天发现这种写法很不错: TButton创建窗口是在CreateW ...
- IDL_GUI
菜单栏设计 PRO IDLGui ;构建界面 ;显示 ;添加事件 tlb=WIDGET_BASE(xsize=400,ysize=400,/column,mbar=mbar);实现基类 file=WI ...
- iOS:分割控制器UISplitViewcontroller
分割控制器UISplitViewController <1>功能:它也是ipad的一个新特性,在屏幕上可以同时显示两个控制器,左边一个,右边一个:左边的为主控制器,右边的为详细控制器,主控 ...
- java Cache框架
Cache框架乱炖 各类开源的缓存解决方案 JBossCache/TreeCacheJBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让 ...
- Netty4.x中文教程系列(二) Hello World !
在中国程序界.我们都是学着Hello World !慢慢成长起来的.逐渐从一无所知到熟悉精通的. 第二章就从Hello World 开始讲述Netty的中文教程. 首先创建一个Java项目.引入一个N ...
- 1、Hibernate之生成SessionFactory源码追踪
Hibernate的所有session都是由sessionFactory来生成的,那么,sessionFactory是怎么得来的呢?它与我们配置的xxx.cfg.xml文件以及xxx.hbm.xml文 ...
- USACO Section 3.1: Contact
算法简单,写起来遇到些小问题 /* ID: yingzho1 LANG: C++ TASK: contact */ #include <iostream> #include <fst ...
- linux 配置 wlan 连接
第一步,先确定你已经安装了无线网卡驱动.我的是 ath9k ,linux 内核不自带,现编译成模块 然后安装上.具体步骤请自行搜索 linux 编译内核 第二步,起用模块 modprobe ath9k ...
- 【转】Java中==、equals、hashcode的区别与重写equals以及hashcode方法实例
原文地址:http://www.cnblogs.com/luankun0214/p/4421770.html 感谢网友的分享,记录下来只为学习. 1.重写equals方法实例 部分代码参考http ...
- PowerDesigner15.1创建模型及生成带注释sql操作手册
转自:http://blog.csdn.net/huiwenjie168/article/details/7824029 一.创建模型 操作:file-->new Model… 快捷键:ctrl ...