程序中只知道外部文件的路经及文件名,想做到这样:如果该文件类型已在系统中注册,则直接调用外部程序来打开该文件,如果类型未注册,则调用类似用'打开方式...'的方法提示,相当于windows自身打开各种文档的形式,不知该怎么做

解决方案 »

  1.   

    类型未注册,则调用类似用'打开方式...'的方法提示 我不会!学习
      if OpenDialog1.Execute then
        WinExec(Pchar(OpenDialog1.FileName), SW_SHOW);
      

  2.   

    用WinExec(Pchar(OpenDialog1.FileName), SW_SHOW);没有任何反应
      

  3.   

    ShellExecute的各种用法一、利用系统默认的邮件收发器发送电子邮件
    Uses
      ..., ShellAPI;Var
      lpHwnd: HWND;
      lpOperation, lpFile, lpParameters, lpDirectory: String;
    Begin
      lpHwnd:= GetDesktopWindow();
      lpOperation:= 'open';
      lpFile:= 'mailto:' + '[email protected]' + '?' //主邮件地址后以'?'结束
             + '&cc=' + '[email protected]'      //抄送
             + '&bcc=' + 'lyf.kibosoft.com'         //暗送 
             + '&subject=' + '主题'
             + '&body='+ '第一行内容' + '%0d' + '第二行内容'    //主题内容以 '%0d' 转行
             + '&File=' + 'D:\Help.rtf';  //附件只对 Outlook Express 有效
      lpParameters:= '';
      lpDirectory:= '';
      ShellExecute(lpHwnd, pChar(lpOperation),
                   pChar(lpFile), pChar(lpParameters),
                   pChar(lpDirectory), SW_SHOWNORMAL);
    End;二、打开一个网页
         ShellExecute(0, 'open', 'http://www.google.com', '', '', SW_SHOWNORMAL);三、打印文档
         ShellExecute(0, 'print', 'D:\Help.rtf', '',  '', SW_SHOWNORMAL)四、利用系统默认的程序打开指定的文件
         ShellExecute(0, 'open', 'D:\Help.rtf', '',  '', SW_SHOWNORMAL))五、用指定的程序打开指定的文件
         ShellExecute(0, 'open', 'notepad.exe', 'D:\Help.rtf', '', SW_SHOWNORMAL)六、执行快捷方式(.LNK)
        ShellExecute(handle,'open','c:\windows\desktop\aaa.lnk','', '', sw_hide); 
      

  4.   

    解决了,调用winexec(PChar('rundll32 shell32,OpenAs_RunDLL '+文件),0);就可以调用系统的‘打开方式...’了,winexec的第二个参数我还没确定要用哪个,试了几个好像都能用。主要就是运行'rundll32 shell32,OpenAs_RunDLL '后面跟文件名,可以是 .扩展名之类的,在运行中执行这个也会出来‘打开方式...’对话框。结贴