请问如何使自己写的程序跟所有类型的文件关联呢?就象WinRAR一样,每个文件的右键菜单里都有一个WinRAR的项目。谢谢!
解决方案 »
- 关于QQ,迅雷7安装界面
- MDI子窗口打开时的问题
- 向某句柄的窗口发送F1键,一直不能成功,100分求人来帮助
- 请问在XP的sp2电脑上Dcom Connection 连接中间件的,但就是连不上,提示为拒绝访问,这是为何呀?
- 请问一个关于用QReport做报表的问题
- 如何压扁Tlistview的头控件
- 急急!!客户端提示语法错误或访问冲突的问题(解决问题立即给分)
- access数据库,一表中有一字段bid,形式为‘2002-0001’,如何在新增一条新记录时,使bid字段自动加1,如‘2002-0002’?
- delphi的chat問題..
- 请问这里的高手:刻录光盘时如何才能加入自动运行功能(即有autorun.exe和autorun.inf)?
- 【在线等】小弟刚从C转,不知道这段代码怎么用delphi写
- 在线等待,在线给分。。。。求助!
//ft:文件名后缀,如可以为'.tst'或'afile.tst'
//key:在注册表中的键值,要唯一
//desc:关联程序的描述
//icon:缺省的程序图标,如Application.ExeName+',1',可以缺省
//prg:对应的应用程序
var myreg : treginifile;
ct : integer;
begin // 取文件的后缀
ct := pos('.',ft);
while ct > 0 do begin
delete(ft,ct,1);
ct := pos('.',ft);
end;
if (ft = '') or (prg = '') then exit; //判断后缀及应用程序是否有效
ft := '.'+ft;
myreg := treginifile.create('');
try
myreg.rootkey := hkey_classes_root; // 根应该为HKEY_CLASSES_ROOT
if key = '' then key := copy(ft,2,maxint)+'_auto_file';
// 如果没给出键值,则自动创建一个
myreg.writestring(ft,'',key); // 写入描述的键值
myreg.writestring(key,'',desc); // 写入描述
if icon <> '' then
myreg.writestring(key+'\DefaultIcon','',icon);
// 写入缺省图标
myreg.writestring(key+'\shell\open\command','',prg+' "%1"');
//写入相关联的应用程序
finally
myreg.free;
end;
end;
调用例子:
Example:
registerFileType('.tst',
'testfile',
'测试关联文件',
Application.ExeName+',1',
Application.ExeName);
原理说明:
程序关联的键值放在注册表根为HKEY_CLASSES_ROOT下面。实现文件关联要写入两
个键值:后缀键值和描述键值(可用术语用的不对)
如实现将.tst与程序tstfile.exe相关联
其中后缀键值形为: .tst myprogram
key值为文件后缀,取值为对于key的一个描述
描述键值形为: myprogram 文件描述
其中还有相应的子键,如缺省的程序图标,形为:
myprogram\DefaultIcon '', 'tstfile.exe,1'
打开命令,形为:
myprogram\shell\open\command '', 'tstfile.exe "%1"'
写入完这两个键值后就可以实现文件与应用程序相关联了。
首先,全部文件是用HKEY_CLASSES_ROOT\* 表示的。
其次,要使全部文件都有同样的菜单项,我所知道的有两种:
一是在HKEY_CLASSES_ROOT\*\shell下添加命令项子键,再在其下层添加COMMAND子键,并写入命令行语句。
二是在HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers下添加“子菜单”项子键,其默认值是如同"{B41DB860-8EE4-11D2-9906-E49FADC173CA}"这样的GUID,当然这个GUID也应该注册进注册表中。
前者只是加入一个菜单项命令,而后者可以实现嵌入子菜单项。WINRAR的选项中就有设置“是否层叠右键菜单”,就是掌管切换这两种形式的。