节选自 Delphi中注册表构件TRegistry的应用 王发军
实现文件关联
当MS WORD安装在你的系统中时,它会把.DOC文件与自己关联,当你双击一个DOC文件,就会
启动MS WORD,打开你指定的DOC文件。你也可以把一个文件类型与一个程序关联起来,其秘密
还是在注册表中。如果打开注册表,找到HKEY_CLASSES_ROOT,就会发现这里已经有很多文件
类型。
你也可以在这里增加一个键,建立自己的文件关联。
建立文件关联,一般应有两个步骤:
(1)根据文件类型的扩展名,指定对应的键名(如doc 文件对应的键为doc_auto_file)
该键及其子键的值,将定义该类型的文件的类型说明和操作(如打开、编辑)说明
(2)在指定的键名下,建立子键,指明文件类型说明和操作对应的程序信息
例如,我们可以为.DBF文件建立文件关联,其文件类型说明为"xBase 数据表",使其打开
(Open)文件的操作对应程序C:/Program Files/Borland/DBD/DBD32.EXE。首先,应在注册
表的根键HKEY_CLASSES_ROOT下建立一个键,键名为.DBF,默认值为DBF_Auto_File,表示DBF
类型文件的关联操作信息记录在键HKEY_CLASSES_ROOT/DBF_Auto_File 下;然后,建立键
HKEY_CLASSES_ROOT/DBF_Auto_File,并设其默认值为"xBase 数据表",表示文件类型说明;
再建立键 HKEY_CLASSES_ROOT/DBF_Auto_File/Shell/open/command,设置其默认值为
C:/Program Files/Borland/DBD/DBD32.EXE %1(其中"%1 "为命令行参数),表示打开操作
对应的程序信息。
具体实现如下:同样,在Uses 中加上Registry单元,然后,写下面代码。
{将文件类型strFileExtension与程序
strExeFileName相关联,strDiscription为文件类型说明 }
function AssignToProgram(strFileExtension,
strDiscription,strExeFileName : string ) : boolean;
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create;
//建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_CLASSES_ROOT;
//设置根键值为HKEY_CLASSES_ROOT
//根据文件类型的扩展名,创建或打开对应的键名
.FileExt,如DBF对应'.DBF'
if OpenKey( '.' + strFileExtension, true ) then
begin
result := false;
exit;
end;
//设置键.FileExt默认值为FileExt_Auto_File,
如'.DBF'对应'DBF_Auto_File'
WriteString('',strFileExtension + '_Auto_File');
CloseKey;
//写入自己程序的信息
//根据文件类型的扩展名,创建或打开对应的键名
FileExt_Auto_File
//'.DBF'对应'DBF_Auto_File'
if OpenKey(strFileExtension + '_Auto_File', true ) then
begin
result := false;
exit;
end;
//设置默认值文件类型说明,如DBF可对应'xBase数据表'
WriteString('',strDiscription);
CloseKey;
//创建或打开键名FileExt_Auto_File
/Shell/open/command,该键为表示操作为'打开'
//'.DBF'对应'DBF_Auto_File/shell/open/command'
if OpenKey(strFileExtension + '_Auto_File
/shell/open/command', true ) then
begin
result := false;
exit;
end;
//设置该键的默认值为打开操作对应的程序信息
//如DBF可对应'C:/Program Files/Borland/DBD/DBD32.EXE'
WriteString('',strExeFileName + ' %1');
CloseKey;
Free;
end;
end;
{调用AssignToProgram,使DBF文件与DBD32.EXE关联 }
procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.lines.add('开始');
if AssignToProgram('DBF','xBase数据表'
,'C:/Program Files/borland/dbd/dbd32.exe') then
memo1.lines.add('成功')
else
memo1.lines.add('失败')
end;