我是在我的程序里生成了一各特定的后缀文件,现在想把他和我的程序关联起来,希望打开该文件的时候自动启动我的程序来打开他!并且在我的打开的时候能够获得当前是打开得那各文件,这样我就可以在我得程序启动得过程中把打开得文件得数据读到我得程序里显示出来。
其实就是象记事本or word一样,双击txt文件就用记事本打开,并且把文件的数据显示出来。 我的程序也就是要达到那个效果。
要实现目前有2个疑问:1).关联该后缀的文件到我的程序里应该是在我的程序安装的时候实现吧!只要用install了我的程序,在注册表里就产生了关联,但现在本人不知道应该怎么关联。
2).在我得程序没启动得时候,双击该文件就会启动我得程序,但我得程序怎么能够获的当前双击的是那个文件,这样我才能在我的程序里读相关文件的数据出来。
好象要用shell来写那方面的东西,但我不知道具体用那些函数。请教各位了!!!
其实就是象记事本or word一样,双击txt文件就用记事本打开,并且把文件的数据显示出来。 我的程序也就是要达到那个效果。
要实现目前有2个疑问:1).关联该后缀的文件到我的程序里应该是在我的程序安装的时候实现吧!只要用install了我的程序,在注册表里就产生了关联,但现在本人不知道应该怎么关联。
2).在我得程序没启动得时候,双击该文件就会启动我得程序,但我得程序怎么能够获的当前双击的是那个文件,这样我才能在我的程序里读相关文件的数据出来。
好象要用shell来写那方面的东西,但我不知道具体用那些函数。请教各位了!!!
解决方案 »
- 谁做过存折打印吗?
- 有谁知道FastReport2.52能显示数据库中的Image字段吗?请给个例子,非常急!!!先谢了!!!!!!
- 求助dbgrid OnColEnter事件
- 急,帮忙关于olecontainer的问题
- 三个问题,TWebbrowser的两个,内存使用的一个,急求解!(最后的分了,大家海涵)
- 时间问题
- 各位帮忙看看为什么delphi在调试时有一个模块怎么也跟踪不进去
- raise exception class EOleExcetion with message "bookmark is invalid"
- 为什么用CORBA中间层服务器有时会保存不上数据?
- Delphi 日期型字段可以直接参与计算吗?
- 疑问!用ADO连SQL服务器会使服务器变慢?
- 请教Sql语句
2、install shield打包的时候就可以建立文件关联。
Google上可以找到你的答案
DelphiBox也有的
不过你的程序记得要支持参数
//sFileExt:文件后缀,如:'.readme'
//sFileType:文件后缀对应说明,如:'readme.files'
procedure RegFiles(sFileExt,sFileType: String);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.OpenKey(sFileExt, True);
Reg.WriteString('', sFileType);
Reg.CloseKey;
Reg.OpenKey(sFileType, True);
Reg.WriteString('', '说明文件');//说明
Reg.CloseKey;
Reg.OpenKey(sFileType + '\DefaultIcon', True);//显示图标
Reg.WriteString('', Application.ExeName + ',1');
Reg.CloseKey;
Reg.OpenKey(sFileType + '\Shell\Open', True);//打开操作
Reg.WriteString('', '&Open');
Reg.CloseKey;
Reg.OpenKey(sFileType + '\Shell\Open\Command', True);//打开文件命令
Reg.WriteString('', '"' + Application.ExeName + '" "%1"');
Reg.CloseKey;
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);//刷新一下系统
finally
Reg.Free;
end;
end;//删除关联,sKey:把前面设定的文件后缀和文件后缀对应说明都删掉
procedure TfrmMain.DelRegFile(sKey : String);
var
Reg: TRegistry;
begin
Reg := TRegistry.Create;
try
Reg.RootKey := HKEY_CLASSES_ROOT;
Reg.DeleteKey(sKey);
finally
Reg.Free;
end;
end;
你好!谢谢了!用install shield打包的时候怎么建立文件关联?
我现在就是这个问题就捆扰了,因为我想卸载我的程序后相关的关联就删除了。
我现在这个用户选择的安装程序的动态路径应该怎么写到注册表里去?
在installshield里用代码应该这么写呢?
谢谢了!
TRegFileType=class
public
ICONFileName:String;
Command:String;
Ext:String;
TypeInf:String;
ICONIndex:Integer;
CommandName:String;
AutoChangeNotify:Boolean;
DefaultCommand:Boolean;
procedure ChangeNotify;
function SetFileType:Boolean;
function RemoveFileType(RemoveAll:Boolean):Boolean;
constructor Create;
end;
implementation{ RegFileType }procedure TRegFileType.ChangeNotify;
begin
SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;constructor TRegFileType.Create;
begin
CommandName:='Open';
Command:='"'+Application.ExeName+'" "%1"';
ICONFileName:=Application.ExeName;
ICONIndex:=0;
AutoChangeNotify:=true;
DefaultCommand:=false;
end;function TRegFileType.RemoveFileType(RemoveAll:Boolean): Boolean;
var reg:TRegistry; str,str2,AExt:String;
label eexit;
begin
if (Ext='') or ((CommandName='') and (RemoveAll=false)) then
begin
result:=false;
exit;
end;
reg:=TRegistry.Create;
try
reg.RootKey:=HKEY_CLASSES_ROOT;
AExt:=Ext;
if AExt[1]='.' then
Delete(AExt,1,1);
if AExt='*' then
begin
str:='\*\Shell\'+CommandName;
reg.DeleteKey(str);
if AutoChangeNotify then
ChangeNotify;
exit;
end;
str:='\.'+AExt;
if reg.KeyExists(str)=false then
goto eexit;
reg.OpenKey(str,false);
str2:=reg.ReadString('');
reg.CloseKey;
if RemoveAll then
reg.DeleteKey(str);
if str2='' then
goto eexit;
str:='\'+str2;
if reg.KeyExists(str)=false then
goto eexit;
if RemoveAll=true then
begin
reg.DeleteKey(str);
goto eexit;
end;
str:=str+'\Shell\'+CommandName;
reg.DeleteKey(str);
eexit:
reg.Free;
result:=true;
if AutoChangeNotify then
ChangeNotify;
except
reg.Free;
result:=false;
end;
end;function TRegFileType.SetFileType: Boolean;
var reg:TRegistry; str,AExt:String;
begin
if (Ext='') or (CommandName='') then
begin
result:=false;
exit;
end;
reg:=TRegistry.Create;
try reg.RootKey:=HKEY_CLASSES_ROOT;
AExt:=Ext;
if AExt[1]='.' then
Delete(AExt,1,1);
if AExt='*' then
begin
str:= '\*\Shell\'+CommandName;
reg.CreateKey(str);
str:=str+'\command';
reg.OpenKey(str,True);
reg.WriteString('',Command);
reg.CloseKey;
if AutoChangeNotify then
ChangeNotify;
exit;
end;
str:='\.'+AExt;
reg.OpenKey(str,true);
str:=AExt+'file';
reg.WriteString('',str);
reg.CloseKey;
str:='\'+AExt+'file';
reg.OpenKey(str,true);
reg.WriteString('',TypeInf);
reg.CloseKey;
str:='\'+AExt+'file\DefaultIcon';
reg.OpenKey(str,true);
str:=ICONFileName+' ,'+IntToStr(ICONIndex);
reg.WriteString('',str);
reg.CloseKey;
str:='\'+AExt+'file\shell';
reg.CreateKey(str);
if DefaultCommand then
begin
reg.OpenKey(str,true);
reg.WriteString('',CommandName);
end;
str:=str+'\'+CommandName;
reg.CreateKey(str);
str:=str+'\command';
reg.OpenKey(str,true);
str:=Command;
reg.WriteString('',str);
reg.CloseKey;
reg.Free;
if AutoChangeNotify then
ChangeNotify;
result:=true;
except
reg.Free;
result:=false;
end;
end;end.
谢谢了!我的E_Mail是:[email protected]
希望以后能多多联系,学习交流!