c++ win32调用exe,并等待其结束
2012-02-23 00:29
211 查看
调用exe 有诸如 ShellExecute(Ex) , System 之类的函数,本文以ShellExecuteEx为例子,调用exe,并等待其结束。
char ActiveCmd[200] ={0};
sprintf(ActiveCmd, "%s %s", argv[1] , argv[2] );
printf( "%s\n", ActiveCmd);
/** 转换char * ---> TCHAR **/
int actcnt = MultiByteToWideChar(CP_ACP, NULL, ActiveCmd, -1, NULL, 0);
TCHAR * pbuffer = new TCHAR[actcnt + 1];
memset(pbuffer, 0, sizeof(pbuffer));
MultiByteToWideChar(CP_ACP, NULL, ActiveCmd, -1, pbuffer, actcnt);
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"open";//多种类别有 "explorer" "print" 等
ShExecInfo.lpFile = EXE_FILE;//exe 路径
ShExecInfo.lpParameters = pbuffer;//参数
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;//
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
printf("waiting... \n ");
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);//等待完成 第二个参数是超时时间(毫秒)超时后返回超时代码
delete pbuffer;
pbuffer = NULL;
也可以简单的调用:
::ShellExecute(NULL, NULL, EXE_PATH , pbuffer, NULL,SW_HIDE);//pbuffer 同上需要是 TCHAR*
char ActiveCmd[200] ={0};
sprintf(ActiveCmd, "%s %s", argv[1] , argv[2] );
printf( "%s\n", ActiveCmd);
/** 转换char * ---> TCHAR **/
int actcnt = MultiByteToWideChar(CP_ACP, NULL, ActiveCmd, -1, NULL, 0);
TCHAR * pbuffer = new TCHAR[actcnt + 1];
memset(pbuffer, 0, sizeof(pbuffer));
MultiByteToWideChar(CP_ACP, NULL, ActiveCmd, -1, pbuffer, actcnt);
SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"open";//多种类别有 "explorer" "print" 等
ShExecInfo.lpFile = EXE_FILE;//exe 路径
ShExecInfo.lpParameters = pbuffer;//参数
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_HIDE;//
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
printf("waiting... \n ");
WaitForSingleObject(ShExecInfo.hProcess, INFINITE);//等待完成 第二个参数是超时时间(毫秒)超时后返回超时代码
delete pbuffer;
pbuffer = NULL;
也可以简单的调用:
::ShellExecute(NULL, NULL, EXE_PATH , pbuffer, NULL,SW_HIDE);//pbuffer 同上需要是 TCHAR*
相关文章推荐
- C++以阻塞的方式调用外部exe程序,等待其运行结束
- delphi 调用外部exe ,并等待调用程序运行结束
- MFC调用exe程序,并等待exe程序运行结束(ShellExecuteEx)
- c++执行cmd指令、cmd隐藏进程不出现控制台、结束进程、调用exe、CreateProcess以及WinExec的使用
- C++ 调用exe,可等待调用的exe执行完毕后才继续执行父进程 CreateProcess
- MFC调用exe程序,并等待exe程序运行结束(ShellExecuteEx)
- C++调用perl 主线程等待子线程结束
- 等待一个进程结束,调用外部exe
- C#调用Exe文件的方法及如何判断程序调用的exe已结束
- C++中调用exe可执行文件
- C#调用C++的EXE
- Win32控制台应用程序如何调用另一个.exe
- win32中C++隐藏窗口调用程序
- c++ 调用 exe
- VB Shell调用后 等待程序运行结束
- 基于Windows平台,C++ 如何调用exe程序
- VB Shell调用后 等待程序运行结束
- delphi调用外部EXE,等待执行完毕时再响应后续操作.
- 调用带输入参数的exe(C++)
- C#调用Exe文件的方法及如何判断程序调用的exe已结束