VC中如何调用其他的可执行程序

来源:互联网 发布:锦江之星酒店知乎 编辑:程序博客网 时间:2024/05/19 22:01

VC中调用其他可执行程序,就我目前所知有三种方法:

  1. HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpVerb, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);

    特殊需要讲的参数:
    lpVerb:对lpFile要执行的行为,包括"open","explore","print","edit","find","properties"
    lpFile:要操作的对象
    lpParameters:传递给为lpFile的参数
    nShowCmd:窗口的显示参数,不显示(SW_HIDE)
    注意:返回值如果小于32,则是错误,见具体错误

    其扩展函数ShellExecuteEx功能更全
    此函数声明包含在头文件shellapi.h,库是shell32.lib
  2. UINT WinExec(
                              LPCSTR
    lpCmdLine, // command line
                              UINT uCmdShow      // window style
    );

    参数lpCmdLine为文件名+参数
    如果执行正确,返回值大于31

    声明在头文件windows.h,包含在kernel32.lib中
  3.  BOOL CreateProcess(
         LPCTSTR
    lpApplicationName, // name of executable module
         LPTSTR
    lpCommandLine, // command line string
         LPSECURITY_ATTRIBUTES
    lpProcessAttributes, // SD
         LPSECURITY_ATTRIBUTES
    lpThreadAttributes, // SD
         BOOL bInheritHandles, // handle inheritance option
         DWORD
    dwCreationFlags, // creation flags
         LPVOID
    lpEnvironment, // new environment block
         LPCTSTR lpCurrentDirectory, // current directory name
         LPSTARTUPINFO
    lpStartupInfo, // startup information
         LPPROCESS_INFORMATION lpProcessInformation // process information
    );
    这个够复杂,启动一个进程的方式打开一个程序。声明所在的头文件和库同WinExec

以上三种方法,推荐使用第一种。第二种不推荐使用,因为它存在只是为了支持16位机的。


还需要考虑另外一个问题,就是后面程序的执行,可能需要等待这个进程结束之后才能执行,而不能两个进程并发执行。(两个进程一个是原进程,一个是启动的进程)。参考了:http://www.cnblogs.com/del/archive/2008/02/13/1067871.html

可以如下使用:

 

HANDLE hProg;
hProg=ShellExecute(NULL, "open", "xxx.exe", NULL, NULL, SW_HIDE);
WaitForSingleObject(hProg, INIFINTE);

 

在我使用的时候是要用一个MFC程序打开一个控制台程序,控制台程序执行结果写入到一个文档中,然后再用mfc程序读出。(为什么这么麻烦,是因为控制台程序用到的库是第三方库,不支持MFC,没办法)。

在控制台程序结束时,写的文件未必已经写完,并关闭了。所以还需要额外做些工作。

While(!FileExists(Result.TXT));

READFile(Result.TXT);

注意while语句后面的";"

 

总结到此吧。

 

参考文档:MSDN 2000

原创粉丝点击