我要在我的程序中根据用户选择的文件类型启动相应的应用程序,并用它打开用户指定的文件,怎么做啊,shellexecute函数可以吗?可是参数我总传递不对,有没有哪位大哥有这方面的例子或经验,给小弟分享一下,

解决方案 »

  1.   

    使用CreateProcess()函數,定義如下
    BOOL CreateProcess(
      LPCTSTR lpApplicationName,
                             // pointer to name of executable module
      LPTSTR lpCommandLine,  // pointer to command line string
      LPSECURITY_ATTRIBUTES lpProcessAttributes,  // process security attributes
      LPSECURITY_ATTRIBUTES lpThreadAttributes,   // thread security attributes
      BOOL bInheritHandles,  // handle inheritance flag
      DWORD dwCreationFlags, // creation flags
      LPVOID lpEnvironment,  // pointer to new environment block
      LPCTSTR lpCurrentDirectory,   // pointer to current directory name
      LPSTARTUPINFO lpStartupInfo,  // pointer to STARTUPINFO
      LPPROCESS_INFORMATION lpProcessInformation  // pointer to PROCESS_INFORMATION
    );
    其中你可以把你想打開的文件名字作為lpCommandLine傳進去,不過你最好看看MSDN,這個參數是不能隨便傳的.有一些注意點
      

  2.   

    使用CreateProcess吧,例如使用CreateProcess打开*.txt文件:
    STARTUPINFO si;
    PROCESS_INFORMATION pi;ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);if( CreateProcess( NULL, "c:\\Temp\\test.txt", NULL, NULL, FALSE,NORMAL_PRIORITY_CLASS, NULL,NULL, &si, &pi) == 0 )
    {
      MessageBox( NULL, "错误", "提示", MB_OK|MB_ICONSTOP );
      return;
    }WaitForSingleObject( pi.hProcess, INFINITE ); //等待用户关闭*.txt文件
      

  3.   

    PROCESS_INFORMATION ProcInfo;
    STARTUPINFO si;
    ZeroMemory(&si,sizeof(si));
    si.cb=sizeof(si);
    CreateProcess(notepad.exe,"C:\\read.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&ProcInfo);
      

  4.   

    CreateProcess( 
    LPCWSTR lpszImageName, 
    LPCWSTR lpszCmdLine, 
    LPSECURITY_ATTRIBUTES lpsaProcess, 
    LPSECURITY_ATTRIBUTES lpsaThread, 
    BOOL fInheritHandles, 
    DWORD fdwCreate, 
    LPVOID lpvEnvironment, 
    LPWSTR lpszCurDir, 
    LPSTARTUPINFOW lpsiStartInfo, 
    LPPROCESS_INFORMATION lppiProcInfo); 
      

  5.   

    如果是其它文件类型可以这样做:
    CreateProcess( NULL, " c:\\temp\\your.exe c:\\Temp\\test.dat", ...
    但你的程序必须支持命令行参数
      

  6.   

    winexec也可以吧
    CString Open="C:\\winnt\\notepad.exe ";
    file="D:\\1.txt";
    Open+=file;
    WinExec(Open,SW_SHOWNORMAL);
      

  7.   

    不是啊,我检查过文件名了,是正确的,而且我用notepad测试过,代码是可行的,但用我编的那个应用程序打开文件就不行,需要做什么设置吗?
      

  8.   

    ShellExecute(NULL, "open", "c:\\Temp\\test.txt", NULL, NULL, SW_SHOWNORMAL);
      

  9.   

    你先试试在那种文件上双击,看是否由你的程序打开。
    如果不是,则在WINDOWS中将它们关联后,双击是否能由你的程序正确打开。
      

  10.   

    双击文件名时可以用我的程序打开,但用函数CreateProcess启动时参数设置了文件名也打不开,怎么回事啊。
    winexec函数msdn上说是在16位系统上用的,32位上应该用CreateProcess;