如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)

原创 2014年04月10日 09:52:41

如何在代码里启动调用一个程序,等到它运行结束,还要晓得它的结果再去搞其他的事情?


// 先看看怎么调用一个程序吧?

// ShellExecuteEx可以实现,还会返回一个句柄。句柄一定要有,后面都要通过这个句柄判定结束与否和运行结果

//  据说Process也可以实现,但是的第二个参数const *啊硬伤一直没调试通过,但是很多大神说可以。

// ShellExecuteEx使用大致如下:主要设置一个lpFile(就是名字路径等等),一个lpParameters(命令行参数,可以多个参数一起来),

// 一个lpVerb(就是调用方式一般是 open),一个nShow(就是调用以后显示与否的设定)。这里粗线条划过,自己多测试,看函数原型MSDN等。

// 建议:直接复制过去改着四个参数就好了 :)lz都比较懒

SHELLEXECUTEINFO ShExecInfo = {0};        // ShellExecuteEx调用例程及定义
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = _T("open"); // 重要参数,见上述介绍
ShExecInfo.lpFile = _T("test_04.10.exe");// 重要参数,见上述介绍
ShExecInfo.lpParameters = _T("-r 小明.txt");// 重要参数,见上述介绍
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;// 重要参数,见上述介绍
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);  // 可生成句柄,供WaitForSingleObject调用

// 怎么判定程序结束与否,怎么等到程序跑完了再干其他事情呢?

// WaitForSingleObject需要一个你所调用程序的句柄,不然它通过锤子来晓得你调用的程序跑完没啊:)

// 细节自己去谷歌bing百度MSDN

WaitForSingleObject(ShExecInfo.hProcess,INFINITE);


// 怎么把调用结果搞出来了?调用了不错,成功与否谁知道呢,不能老打印命令提示符吧

// 打印被调用函数的返回值,非零则未成功执行

// 同样需要搞一个句柄来指一下你调用的程序啦,GetExitCodeProcess满足你的需求

GetExitCodeProcess(ShExecInfo.hProcess, &dwExitCode); 
        printf("Exit code(Read) : %d\n", dwExitCode);


请注意:不要忘记了头文件,下面几个头估计都要用到

#include <windows.h>
#include <ShellAPI.h>    // ShellExecuteEx
#include <tchar.h>


来源http://my.oschina.net/laopiao/blog/91936等等等等等


ShellExecute,ShellExecuteEx, WinExec ,CreateProcess区别

ShellExecute,ShellExecuteEx, WinExec ,CreateProcess区别:       WinExec 使用最简单,此功能提供了16位Windows的兼容性,估计内部...
  • jinru2560
  • jinru2560
  • 2010年02月26日 10:38
  • 2319

执行外部程序并等待返回

  • 2014年11月13日 11:44
  • 9.24MB
  • 下载

C/C++执行外部程序(调用外部exe程序)

C中的函数: 1.exec() 函数家族: exec() 家族的函数将会创建一个新的进程来执行程序。(不能设置权限,只是单纯的传值执行exe) _execl, _wexecl _execv, _wex...
  • u011164819
  • u011164819
  • 2016年12月02日 10:53
  • 2759

C++以阻塞的方式调用外部exe程序,等待其运行结束

调用exe 有诸如 ShellExecute(Ex) , System 之类的函数,本文以ShellExecuteEx为例子,调用exe,并等待其结束。...
  • Ango_
  • Ango_
  • 2014年07月17日 16:02
  • 2037

如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)

 ShellExecute: 1.函数功能: 你可以给它任何文件的名字,它都能识别出来并打开它。 2.函数原型: HINSTANCE ShellExecute(            ...
  • gdfyl
  • gdfyl
  • 2014年10月27日 15:50
  • 2829

如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)

 ShellExecute: 1.函数功能: 你可以给它任何文件的名字,它都能识别出来并打开它。 2.函数原型: HINSTANCE ShellExecute(            ...
  • gdfyl
  • gdfyl
  • 2014年10月27日 15:50
  • 2829

使用ShellExecuteEx调用控制台程序或命令行,传入多个参数,并等待返回结果

// 封装函数 // 参数依次为: // 执行程序的路径 // 传给执行程序的参数 // 执行程序环境目录 // 最大等待时间, 超过这个时间强行终止。 INFINITE 无限等待 DWORD Win...
  • Alsmile
  • Alsmile
  • 2013年01月10日 15:54
  • 4913

vb.net如何判断shell完成,或者等待shell完成

Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHa...
  • dzweather
  • dzweather
  • 2015年11月07日 11:33
  • 4239

如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)

 ShellExecute: 1.函数功能: 你可以给它任何文件的名字,它都能识别出来并打开它。 2.函数原型: HINSTANCE ShellExecute(            ...
  • gdfyl
  • gdfyl
  • 2014年10月27日 15:50
  • 2829

Day 4:一个程序运行成功及解决方法

这是最后通过编译的代码。 #include #include LRESULT CALLBACK WinSunProc( HWND hwnd, UINT uMsg, WPARAM wPar...
  • q378992971
  • q378992971
  • 2016年08月08日 16:57
  • 91
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)
举报原因:
原因补充:

(最多只允许输入30个字)