如何编程实现采用系统缺省的程序打开各种类型的文件(200分)

  • 主题发起人 主题发起人 fa
  • 开始时间 开始时间
F

fa

Unregistered / Unconfirmed
GUEST, unregistred user!
;编程实现采用系统缺省的程序打开各种类型的文件,
例如让notepad 打开 *.txt。
是否要读注册表,如果要读,如何获得系统缺省值?
 
前面已经说了很多了,
用ShellExecute, 之类的东东,
就可以了,什么也不用管。
 
同意SuperMMX!
实在不行 查看--选项--文件类型--
嘻,玩笑啦!
 
shellexecute可以
另一个办法
winexec('start c:/bffile.txt',1);
 
(******************************************************************************)
(* Enumerate - Returns a list of extensions currently associated with *)
(* currently identified application. *)
(******************************************************************************)
function TMILAssociate.Enumerate : TStringList;
var
KeyList,
ResultList : TStringList;

iCount,
jCount : Integer;

WorkStr,
WorkStr2 : String;

begin
KeyList := TStringList.Create;
ResultList := TStringList.Create;

shellReg := TRegistry.Create;
shellReg.RootKey := HKEY_CLASSES_ROOT;
shellReg.OpenKey('', False);
shellReg.GetKeyNames(KeyList);

for iCount := 0 to KeyList.Count - 1 do
begin
if Copy(KeyList.Strings[iCount], 1, 1) <> '.' then
begin
shellReg.CloseKey;
shellReg.OpenKey(KeyList.Strings[iCount] + '/Shell/Open/Command', False);

WorkStr := shellReg.ReadString('');
if Pos(ExtractFileName(FShell), WorkStr) > 0 then
begin
for jCount := 0 to KeyList.Count - 1 do
begin
if Copy(KeyList.Strings[jCount], 1, 1) = '.' then
begin
shellReg.CloseKey;
shellReg.OpenKey(KeyList.Strings[jCount], False);

WorkStr2 := shellReg.ReadString('');
if WorkStr2 = KeyList.Strings[iCount] then
ResultList.Add(UpperCase(KeyList.Strings[jCount]));
end;
end;
end;
end;
end;

KeyList.Clear;
KeyList.Free;

shellReg.CloseKey;
shellReg.Free;

Result := ResultList;
end;
 
要修改注册表
例子:
看看txt文件的注册:
HKEY_CLASSES_ROOT/.txt

HKEY_CLASSES_ROOT/txtfile

其中包括该类型文件的图标,打开程序,编辑程序,打印程序。
 
直接用start xxx.xxx 就可以了,会自动调出相关的执行文件的.
 
通过修改注册表可以实现,譬如你的程序名叫abc.exe
关联的文件为*.abc
则在注册表中将*.abc的键值为abcfile
新建一个键为abcfile,设它的键值为'PATH/abc.exe' %1

这样你在资源管理器中双击某一abc结尾的文件,abc.exe就自动启动,并打开该文件

但这个仅限于一个文件,如果是一次选中多个文件,点鼠标右键,选择“open”,
则前一种方法就不合适了,必须通过DDE
我们在File Types选项中可以观察Winword的DOC文件的打开方式,
它使用了DDE
在DDE Message栏里有如下的语句:
[REM _DDE_Direct][FileOpen("%1")]
我不知道接下来Winword怎么来处理这个消息,希望哪位大虾告之,谢谢
 
; 使用shellexecute,可以打开文本文件了,但是采用同样的接口
ShellExecute(wnd,'open',filename,nil,nil,SW_SHOWNORMAL);
却打不开一些其他格式的文件,例如htm和html
望众位大虾不吝赐教。
 
用 start 文件 可以打开所有有关联的程序。
start c:/vv.htm 就可以用ie打开vv.htm
 
;但是我现在如果用
shellexecute(wnd,'open',filename,nil,nil,SW_SHOWNORMAL);
就可以打开除htm和html(暂时没有发现其他不能打开的类型)以外的所有文件,
而如果用
winexec('start '+filename,SW_SHOWNORMAL);
则什么响应都没有。
奇怪!
 
该问题怎么还不结束?
我来总结一下:
1。用winexec('start '+filename,SW_SHOWNORMAL) 实际上是调用command文件夹
中的start文件启动相应程序。会打开dos prompt窗口
2。shellexecute(wnd,'open',filename,nil,nil,SW_SHOWNORMAL);直接调用相关
程序打开文件
估计你的情况与ie有关 与windows系统有关
 
>>调用command文件夹中的start文件启动相应程序。会打开dos prompt窗口

呵呵,只要把winexec的第二个参数设为sw_hide就可以隐藏这个dos窗口.
 
多人接受答案了。
 
后退
顶部