能不能根据一个文件的后缀名,自动找到相应的程序把它打开?(200分)

  • 主题发起人 主题发起人 zxpright
  • 开始时间 开始时间
Z

zxpright

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI里面,能不能根据一个文件的后缀名,自动找到相应的程序把它打开?
例如,有个文件是ppt,在程序里自动调用powerpoint,把它打开.
可以吗?
怎么做?
是这样的,我做了一个ftp程序,下载文件到本地机器上,现在想下载成功后,直接把它打开。
多谢各位。
 
用 ;ShellExecute
或者WinexeC
 
直接用ShellExecute就行了,Windows会自动打开已经关联的程序的(没有关联的文件我不知道是产生异常号是什么也不做还是打开选择执行程序)
或者自己到注册表里去查。
 
shellexecute(wnd,'open',filename,nil,nil,SW_SHOWNORMAL);
 
shellexecute(winapi)
 
shellexecute(wnd,'open',filename,nil,nil,SW_SHOWNORMAL);
就可以了
它会据文件名的后缀名自动找到关联程序打开的!
 
現在無才知道喱 ^o^
 
太好了。可是:
为什么我打开这个
shellExecute(form1.handle,pchar('E:/zhw.pdf'),nil,nil,SW_SHOWNORMAL);
它只是闪了一下就不见了(也没有打开呀!!!)
我的机子装了阅读PDF的软件了!!!!!
 
To : Zhang12321
;
ShellExecute(Form1.Handle, 'open', 'E:/zhw.pdf', Nil, Nil, SW_SHOWNORMAL);
 
Sorry那是我写错 了。应该 有OPEN的。
可是那也不行
如:
procedure TForm1.Button1Click(Sender: TObject);
begin
; ShellExecute(Form1.Handle, 'open', 'E:/zz.pdf', Nil, Nil, SW_SHOWNORMAL);
end;
 
若是换成'E:/zhw.txt' or 'E:/zhw.doc'
就能用记事本和WORD打开。
不知何故
 
可是在我的机器里面用
ShellExecute(form1.Handle, 'open', 'filelocation', Nil, Nil, SW_SHOWNORMAL);
总是编译不过去呢?说ShellExecute没有定义,非法字符。
难道要加上一个动态连接库吗?
ShellExecute是在哪里定义的呢?
能写出完整的用法吗?
 
uses shellapi;
 
function GetAssociation(const DocFileName: string): string;
var
FileClass: string;
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create(KEY_EXECUTE);
Reg.RootKey := HKEY_CLASSES_ROOT;
FileClass := '';
if Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName)) then
begin
FileClass := Reg.ReadString('');
Reg.CloseKey;
end;
if FileClass <> '' then begin
if Reg.OpenKeyReadOnly(FileClass + '/Shell/Open/Command') then
begin
Result := Reg.ReadString('');
Reg.CloseKey;
end;
end;
Reg.Free;
end;
 
uses shellAPI;

ShellExecute是在这个单元声明的
 
function GetAssociation(const DocFileName: string): string;
var
FileClass: string;
Reg: TRegistry;
begin
Result := '';
Reg := TRegistry.Create(KEY_EXECUTE);
Reg.RootKey := HKEY_CLASSES_ROOT;
FileClass := '';
if Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName)) then
begin
FileClass := Reg.ReadString('');
Reg.CloseKey;
end;
if FileClass <> '' then begin
if Reg.OpenKeyReadOnly(FileClass + '/Shell/Open/Command') then
begin
Result := Reg.ReadString('');
Reg.CloseKey;
end;
end;
Reg.Free;
end;
谁能解释一下上面那是作什么用的???
另外:
为什么PDF的就打不开呢???(它只是程序闪一下就不见了,并没有打开!!!)
 
谢谢各位!深表感谢。
 
后退
顶部