社区
Windows SDK/API
帖子详情
关于文件类型关联的问题
yzsind
2005-06-10 05:44:43
请问如何将某种类型的文件与系统关联,比如像PDF文件系统会自动打开PDF阅读器,XLS文件会自动打开EXCEL,DOC文件会自动打开WORD等等,要求在IE中也会像EXCEL打开XLS一样的效果。
...全文
293
4
打赏
收藏
关于文件类型关联的问题
请问如何将某种类型的文件与系统关联,比如像PDF文件系统会自动打开PDF阅读器,XLS文件会自动打开EXCEL,DOC文件会自动打开WORD等等,要求在IE中也会像EXCEL打开XLS一样的效果。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
giveusomecolor
2005-06-18
打赏
举报
回复
帮你顶
~~
lovend
2005-06-10
打赏
举报
回复
帮你顶
Kshape
2005-06-10
打赏
举报
回复
文件关联的目的是要实现某种扩展名的文件由相应的应用程序来打开,对于编写的应用软件来说,由于一般都有设计者特定的扩展名的数据文件,软件编制者应在程序中实现自动关联而不能由用户手工去实现。下面给出实现文件关联的实用程序。
实现文件关联的核心是对注册表的操作, 所有的文件关联都在HKEY—CLASSES— ROOT 下面,要实现文件关联必须在HKEY—CLASSES—ROOT 中增加两个键值,一是和文件扩展名对应的类型说明,二是对这种类型文件的操作所需要执行的应用程序。下面举例说明,本例实现将扩展名为.xyz的文件定义为“我自己的文件”类型,双击此种类型的文件时执行的打开功能使用记事簿程序。 实现这一功能需要用到Delphi中的函数 RegCreateKey、RegSetValue。实现如下:
在窗体中放置一个按钮,双击按钮写如下代码:
procedure TForm1.Button1Click(Sender: TObject);
var
lphKey: HKEY;
sKeyName: string;
sKeyValue: string;
begin
sKeyName := 'myfile';
sKeyValue := '我的文档';
RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, '', REG—SZ, pchar(sKeyValue), 0);
sKeyName := '.xyz';
sKeyValue := 'myfile';
RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, '', REG—SZ, pchar(sKeyValue), 0);
sKeyName := 'myfile';
sKeyValue := 'c:\Windows\NotePad.exe %1';//这里设置程序
RegCreateKey(HKEY—CLASSES—ROOT, pchar(sKeyName), lphKey);
RegSetValue(lphKey, 'shell\open\command', REG—SZ, pchar(sKeyValue), MAX—PATH);
end;
建立一新文件,使其扩展名为.xyz,然后双击它看是否是启动记事簿来打开的。
Kshape
2005-06-10
打赏
举报
回复
注册表文件关联
uses
registry, shlobj;
procedure TForm1.RegisterFileType(prefix: string; exepfad: string);
var
reg: TRegistry;
begin
reg := TRegistry.Create;
try
reg.RootKey := HKEY_CLASSES_ROOT;
//create a new key --> .pci
reg.OpenKey('.' + prefix, True);
try
//create a new value for this key --> pcifile
reg.Writestring('', prefix + 'file');
finally
reg.CloseKey;
end;
//create a new key --> pcifile
reg.CreateKey(prefix + 'file');
//create a new key pcifile
reg.OpenKey(prefix + 'file', True);
//and create a value where the icon is stored --> c:.exe,0
try
reg.Writestring('', exepfad + ',0');
finally
reg.CloseKey;
end;
reg.OpenKey(prefix + 'file', True);
//create value where exefile is stored --> c:.exe "%1"
try
reg.Writestring('', exepfad + ' "%1"');
finally
reg.CloseKey;
end;
finally
reg.Free;
end;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
RegisterFileType('pci', 'c:.exe');
end;
*****************************************
注意,在下面这些操作之后,应该发送一个刷新的消息给系统:
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
通过对注册表进行修改,可以删除一种文件名后缀与某个应用程序相关联
程序例如下:
procedure deregisterFileType(ft: String);
//ft:将要删除文件关联的后缀,如.tst
var
myreg:TRegistry;
key: String;
begin
myreg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
myReg.OpenKey(ft, False);
key:=MyReg.ReadString('');
MyReg.CloseKey;
myReg.DeleteKey(ft);
myReg.DeleteKey(key);
myReg.Free;
end;
调用例子:
Example:
deregisterFileType('.tst');
通过对注册表进行修改,可以删除资源管理器上下文件菜单中的新建子菜单中的命令
程序例如下:
procedure FileTDelNew(ft: String);
//fp:文件后缀键值,如.tst
var
myReg:TRegistry;
begin
myReg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
if not myReg.KeyExists(ft) then
begin
MyReg.Free;
Exit;
end;
MyReg.OpenKey(ft, true);
if MyReg.KeyExists('ShellNew') then
MyReg.DeleteKey('ShellNew');
MyReg.CloseKey;
MyReg.Free;
end;
调用例子:
Example:
FileTDelNew('.tst');
原理说明:
将后缀键的下面的子键ShellNew删除即可。
通过对注册表进行修改,可以删除资源管理器上下文件菜单中对某类文件的处理命令
程序例如下:
procedure FileTDelAction(key, name: String);
//key:关联键值为后缀的描述键值,如.tst对应testfile,则key:=testfile
//name:命令名称
var
myReg: TRegistry;
begin
myReg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
//如果给出的是一个文件后缀,则转换成对应的描述键值
//在生成文件关联时,如果未给出描述键值,则会自动生成,此处与上面是联系的
{ if key[1] = '.' then
key:= copy(key,2,maxint)+'_auto_file';}
if key[1] = '.' then
begin
if myReg.KeyExists(key) then //首先看注册表中是否有此键,有则取出
begin
myReg.OpenKey(key, false);
key:=myReg.ReadString ('');
end
else
key:= copy(key,2,maxint)+'_auto_file';
end;
if key[Length(key)-1] <> ' then
key:=key+';
myReg.OpenKey('+key+'shell, true);
if myReg.KeyExists(name) then
myReg.DeleteKey(name);
myReg.CloseKey;
myReg.Free;
end;
调用例子:
Example:
FileTDelAction('test','edit');
原理说明:
将注册表中对应的键值删除就可以了。
通过对注册表进行修改,可以实现一种文件名后缀与某个应用程序相关联
程序例如下:
procedure registerfiletype(ft,key,desc,icon,prg:string);
//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+'','',icon);
// 写入缺省图标
myreg.writestring(key+'','',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 '', 'tstfile.exe,1'
打开命令,形为:
myprogram'', 'tstfile.exe "%1"'
写入完这两个键值后就可以实现文件与应用程序相关联了。
通过对注册表进行修改,可以在资源管理器上下文件菜单中的新建子菜单中增加新的命令
程序例如下:
type
TFileNewType = (ftNullFile, ftFileName, ftCommand);
procedure FileTAddNew(ft, param: String; newType: TFileNewType);
//fp:文件后缀键值,如.tst
//param:传递参数
//newType:新建的类型,有空文件, 文件名, 命令
var
myReg:TRegistry;
begin
myReg:=TRegistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
if not myReg.KeyExists(ft) then
begin
MyReg.Free;
Exit;
end;
myReg.OpenKey(ft+'', true);
case NewType of
ftNullFile : MyReg.WriteString('NullFile', '');
ftFileName : MyReg.WriteString('FileName', param);
ftCommand : MyReg.WriteString('Command', param);
end;
MyReg.CloseKey;
MyReg.Free;
end;
调用例子:
Example:
FileTAddNew('.tst','', ftNullFile);
原理说明:
在后缀键的下面增加子键ShellNew。如在上下文菜单中增加新建.tst文件的命令
在.tst键值下面增加子键 .tst 'NullFile', ''
通过对注册表进行修改,可以在资源管理器上下文菜单中增加对某类文件的处理命令
程序例如下:
procedure FileTAddAction(key, name, display, action: String);
//key:关联键值为后缀的描述键值,如.tst对应testfile,则key:=testfile
//name:命令名称
//display:在上下文件菜单上显示的提示信息
//action:对应的命令
var
myReg:TRegistry;
begin
myReg:=Tregistry.Create;
myReg.RootKey:=HKEY_CLASSES_ROOT;
if name='' then name:=display;
//如果给出的是一个文件后缀,则转换成对应的描述键值
//在生成文件关联时,如果未给出描述键值,则会自动生成,此处与上面是联系的
{ if key[1] = '.' then
key:= copy(key,2,maxint)+'_auto_file';}
if key[1] = '.' then
begin
if myReg.KeyExists(key) then //首先看注册表中是否有此键,有则取出
begin
myReg.OpenKey(key, false);
key:=myReg.ReadString ('');
end
else
key:= copy(key,2,maxint)+'_auto_file';
end;
if key[Length(key)-1] <> ' then
key:=key+';
if name[Length(name)-1] <> ' then
name:=name+';
myReg.OpenKey(key+'Shell+name, true);
myReg.WriteString('', display);
MyReg.CloseKey;
MyReg.OpenKey(key+'Shell+name+'Command, true);
MyReg.WriteString('', action);
myReg.Free;
end;
调用例子:
Example:
FileTAddAction('testfile','edit','Edit',Application.ExeName+'-e "%1"');
原理说明:
如.txt对应的描述键值为testfile
则在testfile的键值下面,增加动作子键
如: testfile '', Edit
testfile '', 'c:-e "%1"'
终极Vim
文件类型
识别指南:解决90%文件扩展名
关联
问题
Vim作为强大的文本编辑器,其
文件类型
识别功能是提升编码效率的关键。本文将详细介绍如何通过Vim自定义文件扩展名与类型
关联
,解决日常开发中90%的文件识别
问题
。掌握这些技巧,让Vim智能识别各种文件格式,为您提供精准的语法高亮和自动补全。 ## Vim
文件类型
识别基础原理 Vim通过文件扩展名自动识别
文件类型
,这是其智能编辑功能的核心。当您打开文件时,Vim会检查文件名后缀并加载相应的语法高亮
ie html
关联
无法更改,大神为你解说win10系统通过设置Ie
关联
文件类型
无法打开HTML网页文件
问题
的详细...
大家在使用电脑工作的时候会遇到win10系统通过设置Ie
关联
文件类型
无法打开HTML网页文件
问题
的
问题
,于是就有一些朋友到本站咨询win10系统通过设置Ie
关联
文件类型
无法打开HTML网页文件
问题
问题
的解决步骤。我就给大家整理总结了win10系统通过设置Ie
关联
文件类型
无法打开HTML网页文件
问题
的解决方法,只需要你依照 1、在win10系统下打开IE浏览器,然后打开Internet选项; 2、...
解决Windows下把程序设为以管理员身份运行后,双击其
关联
的
文件类型
,提示“请求的操作需要提升”的
问题
本文介绍了如何通过修改Windows注册表实现以管理员权限打开特
文件类型
的
关联
程序。主要步骤是在HKEY_CLASSES_ROOT下找到对应程序的
文件类型
项,修改其\shell\Open\Command路径下的命令值,将其改为通过PowerShell以管理员权限启动程序。文中以QtCreator打开.cpp文件为例,详细说明了修改方法。
FileTypesMan:一站式
文件类型
关联
管理工具
【filetypesman】是一款专门用于管理和维护Windows
文件类型
关联
的高级工具。通过它,用户可以轻松创建、修改或删除
文件类型
的
关联
设置,使得文件管理更为便捷和个性化。在本章节中,我们将简要介绍【filetypesman】的来历、功能特点以及如何在系统中进行安装。
文件类型
关联
是操作系统中用来定义特定文件扩展名与对应程序之间的链接关系。例如,当双击一个 “.txt” 文件时,系统会默认用记事本程序打开它。这种
关联
确保了当用户尝试打开文件时,系统可以自动选择合适的程序来处理。
解决未
关联
应用程序的文件
关联
问题
文件没有在Windows上
关联
的应用程序是一个常见的
问题
,但是通过重新
关联
文件类型
,您可以解决这个
问题
。本文提供了详细的步骤来重新
关联
文件类型
,并给出了一个简单的Python脚本示例,帮助您了解如何读取和打开一个文本文件。如果您想使用特定的程序来打开该
文件类型
,可以选择“浏览”选项,并浏览到该程序的可执行文件。
关联
文件类型
:在默认程序窗口中,您将看到一个列表,其中包含了您可以
关联
的
文件类型
。找到您想要
关联
的
文件类型
,并单击它。完成步骤2后,您应该重新打开您的文件,并尝试使用
关联
的程序打开它。
Windows SDK/API
1,184
社区成员
22,326
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章