如何调用一个程序,等待运行结束,并知晓程序运行成功与否: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等等等等等


细细品味ASP.NET (二)

细细品味ASP.NET (二)青苹果工作室(编译) 01-5-17 下午 01:33:55Web表单 ASP.NET Web Forms就是Web页面,同现在你用 ASP编写代码所做的工作是一样的。...
  • tchaikov
  • tchaikov
  • 2001-05-17 18:50:00
  • 990

note : GetExitCodeProcess

// ExitCodeRecv.cpp : Defines the entry point for the console application. // #include "stdafx.h" #...
  • LostSpeed
  • LostSpeed
  • 2013-11-13 01:40:42
  • 795

OpenProcess、GetExitCodeProcess、TerminateProcess

//声明: {返回进程的句柄} OpenProcess(   dwDesiredAccess: DWORD;  {访问选项}   bInheritHandle: BOOL;    {能否继承; Tr...
  • jiangqin115
  • jiangqin115
  • 2015-06-26 16:59:05
  • 803

WaitForSingleObject的用法-(判断一个程序是否结束)

WaitForSingleObject 的应用   你还再为怎么判断一个程序是否结束而苦恼吗?或许你在想可以用一个循环每隔几秒来判断一次这个进程是否结束,但是这样会有问题,如果间隔时间太短就会很占...
  • Iamduoluo
  • Iamduoluo
  • 2011-08-17 10:16:08
  • 9378

WaitForSingleObject 结束线程

from : http://home.eeworld.com.cn/my/space-uid-103677-blogid-114290.html 要实现主线程控制子线程退出,需要考虑到子线程的响...
  • u010059658
  • u010059658
  • 2015-12-14 15:25:56
  • 674

等待进程终止WaitForSingleObject()

有时需要启动一个程序并等待其终止后,主程序再继续执行。可用WaitForSingleObject()函数实现DWORD WINAPI WaitForSingleObject( __in ...
  • ZhengZhiRen
  • ZhengZhiRen
  • 2009-09-10 22:48:00
  • 2333

日常工作问题总结(三十二)shellExecute、shellExecuteEx、WinExec、CreateProcess的区别

shellExecute,shellExecuteEx,WinExec,CreateProcess这几个函数有
  • wu_123_456
  • wu_123_456
  • 2014-10-09 11:11:30
  • 2343

设置和获得VB进程返回值

有时,我们需要设置和获得某个进程结束时的返回值,然后VB并没有C语言中Exit之类的函数,因此我们需要借助API来实现,思路如下:...
  • lyserver
  • lyserver
  • 2010-12-22 10:07:00
  • 2612

ShellExecuteEx打开、关闭exe

//声明结构体 SHELLEXECUTEINFO ShExecInfo; //打开 void OpenExe() { ShExecInfo.cbSize = sizeof(SHELLEXECUTE...
  • liyuan_669
  • liyuan_669
  • 2015-05-15 17:07:48
  • 4275

C++ 判断进程是否存在

判断指定的进程或程序是否存在方法 分类: Windows program 2011-06-27 15:14 112人阅读 评论(0) 收藏 举报 一、判断指定程序名的进程是否存在 ...
  • u010803748
  • u010803748
  • 2016-12-29 14:54:25
  • 3094
收藏助手
不良信息举报
您举报文章:如何调用一个程序,等待运行结束,并知晓程序运行成功与否:ShellExecuteEx;WaitForSingleObject;GetExitCodeProcess(C代码)
举报原因:
原因补充:

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