文件关联是如何实现的? 我自己写了个应用程序,可以打开自己定义的文件格式,现在在实现一般的文件关联后,我想知道如何将我双击的文件名作为参数传递给我的程序并让它打开文件?就象双击DOC文件会启动WORD并打开文件一样.请高手指点! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是在run底下的parameter底下进行设置参数? 在窗体中放置一个按钮,双击按钮写如下代码: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,然后双击它看是否是启动记事簿来打开的。 procedure SetFileOpener(FileKind, FileDescription, FileExt, OpenerPath: String);如 //SetFileOpener('xyz文件', 'xyz文件类型', '.xyz', 'd:\winnt\NOTEPAD.EXE');var lphKey: HKEY;begin RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileKind), lphKey); RegSetValue(lphKey, '', REG_SZ, PChar(FileDescription), Length(FileDescription)); RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileKind), lphKey); RegSetValue(lphKey, 'shell\open\command', REG_SZ, PChar(OpenerPath), Length(OpenerPath)); RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileExt), lphKey); RegSetValue(lphKey, '', REG_SZ, PChar(FileKind), Length(FileKind));end;————————————————————————————————————宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。———————————————————————————————————— 楼上说得建立关联是对的,然后你的程序中处理就是了ParamStr(1)就是双击的文件名称 ParamStr(1)在哪里获得并处理? 这个帖子发出很久了,一直没有得到答案,各位帮帮忙!我自己写的AAA.EXE关联扩展名为.abc的文件后,双击.abc文件后应该打开我的AAA.EXE,请问如果AAA.EXE文件中有一个EDIT控件,如何能在启动后就在EDIT控件里面显示双击的文件名路径?这涉及到带参数的EXE文件如何处理的问题,我不知道如何实现。多写各位!100分送上! 文件类型的关联在Windows 95以后都是通过注册表来实现的,所以只能从写注册表入手。注册表设置完毕后并不能立刻生效,需要调用API函数SHChangeNotify通知系统本应用程序已经执行,需要系统更新Shell。procedure RegisterFileType(cMyExt,cMyFileType,cMyDescription,ExeName:string; IcoIndex:integer; DoUpdate:boolean=false);var Reg: TRegistry;begin Reg:=TRegistry.Create; try Reg.RootKey:=HKEY_CLASSES_ROOT; Reg.OpenKey(cMyExt, True); //写入自定义文件后缀 Reg.WriteString('', cMyFileType); Reg.CloseKey; //写入自定义的文件类型 //格式为:HKEY_CLASSES_ROOT\cMyExt\(Default) = 'cMyFileType' //下面为该文件类型创建关联 Reg.OpenKey(cMyFileType, True); Reg.WriteString('', cMyDescription); //写入文件类型的描述信息 Reg.CloseKey; // 下面为自定义文件类型选择图标 // 加入键格式为 HKEY_CLASSES_ROOT\cMyFileType\DefaultIcon // \(Default) = 'Application Dir\Project1.exe,0' Reg.OpenKey(cMyFileType + '\DefaultIcon', True); Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex)); Reg.CloseKey; // 下面注册在资源管理器中打开文件的程序 Reg.OpenKey(cMyFileType + '\Shell\Open', True); Reg.WriteString('', '&Open'); Reg.CloseKey; // 格式:HKEY_CLASSES_ROOT\Project1.FileType\Shell\Open\Command // (Default) = '"Application Dir\Project1.exe" "%1"' Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True); Reg.WriteString('', '"' + ExeName + '" "%1"'); Reg.CloseKey; //最后,让资源管理器实现我们加入的文件类型,只需调用SHChangeNotify即可 if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil); finally Reg.Free; end;end; 如何能在启动后就在EDIT控件里面显示双击的文件名路径? program Project1;uses Forms, Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin Application.Initialize; Application.CreateForm(TForm1, Form1); Form1.edit1.Text := ParamStr(1); Application.Run;end. TO:kuangning(郎之间)我试试看,非常感谢,好用送分! 请教此类节点读写功能实现的方法和思路! Borland已经不存在了,delphi还会有新版吗? fastreport 的问题 delphi有没有函数可以直接把当前日期增加1年 求助!关于考勤时间的问题! delphi 程序中输出EXCEL表格显示数值时如何设置千分位 如何返回到shelllistview的上一级目录 问:用WISE installation如何打包DELPHI写的MIS软件 如何调用另一窗体的QuickRep进行预览 trying to modify the read-only field 任何获得这个字段值? 如何使DBGRID中的数字显示分节符?
在窗体中放置一个按钮,双击按钮写如下代码:
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,然后双击它看是否是启动记事簿来打开的。
如 //SetFileOpener('xyz文件', 'xyz文件类型', '.xyz', 'd:\winnt\NOTEPAD.EXE');
var
lphKey: HKEY;
begin
RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileKind), lphKey);
RegSetValue(lphKey, '', REG_SZ, PChar(FileDescription), Length(FileDescription));
RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileKind), lphKey);
RegSetValue(lphKey, 'shell\open\command', REG_SZ, PChar(OpenerPath), Length(OpenerPath));
RegCreateKey(HKEY_CLASSES_ROOT, PChar(FileExt), lphKey);
RegSetValue(lphKey, '', REG_SZ, PChar(FileKind), Length(FileKind));
end;————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
我自己写的AAA.EXE关联扩展名为.abc的文件后,双击.abc文件后应该打开我的AAA.EXE,请问如果AAA.EXE文件中有一个EDIT控件,如何能在启动后就在EDIT控件里面显示双击的文件名路径?
这涉及到带参数的EXE文件如何处理的问题,我不知道如何实现。
多写各位!100分送上!
注册表设置完毕后并不能立刻生效,需要调用API函数SHChangeNotify通知系统本应用程序已经执行,需要系统更新Shell。procedure RegisterFileType(cMyExt,cMyFileType,cMyDescription,ExeName:string;
IcoIndex:integer;
DoUpdate:boolean=false);
var
Reg: TRegistry;
begin
Reg:=TRegistry.Create;
try
Reg.RootKey:=HKEY_CLASSES_ROOT;
Reg.OpenKey(cMyExt, True);
//写入自定义文件后缀
Reg.WriteString('', cMyFileType);
Reg.CloseKey;
//写入自定义的文件类型
//格式为:HKEY_CLASSES_ROOT\cMyExt\(Default) = 'cMyFileType' //下面为该文件类型创建关联
Reg.OpenKey(cMyFileType, True);
Reg.WriteString('', cMyDescription);
//写入文件类型的描述信息
Reg.CloseKey; // 下面为自定义文件类型选择图标
// 加入键格式为 HKEY_CLASSES_ROOT\cMyFileType\DefaultIcon
// \(Default) = 'Application Dir\Project1.exe,0'
Reg.OpenKey(cMyFileType + '\DefaultIcon', True);
Reg.WriteString('', ExeName + ',' + IntToStr(IcoIndex));
Reg.CloseKey; // 下面注册在资源管理器中打开文件的程序
Reg.OpenKey(cMyFileType + '\Shell\Open', True);
Reg.WriteString('', '&Open');
Reg.CloseKey; // 格式:HKEY_CLASSES_ROOT\Project1.FileType\Shell\Open\Command
// (Default) = '"Application Dir\Project1.exe" "%1"'
Reg.OpenKey(cMyFileType + '\Shell\Open\Command', True);
Reg.WriteString('', '"' + ExeName + '" "%1"');
Reg.CloseKey; //最后,让资源管理器实现我们加入的文件类型,只需调用SHChangeNotify即可
if DoUpdate then SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
finally
Reg.Free;
end;
end;
Forms,
Unit1 in 'Unit1.pas' {Form1};{$R *.res}begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Form1.edit1.Text := ParamStr(1);
Application.Run;
end.
我试试看,非常感谢,好用送分!