如何判断通过ShellExecute执行的应用程序已经执行完毕?

如何判断通过ShellExecute执行的应用程序已经执行完毕?

今日工作中遇到一问题,当我执行完ShellExecuteEx函数后,发现他不等待ShellExecuteEx调出的执行程序执行完毕,就继续其他代码行。为此特地学习了一下,总结方法有二:

方法一:

...... // 代码行
SHELLEXECUTEINFO sei;
memset(&sei, 0, sizeof(SHELLEXECUTEINFO));

sei.cbSize = sizeof(SHELLEXECUTEINFO);
sei.fMask = SEE_MASK_NOCLOSEPROCESS;
sei.lpVerb = _T("open");
sei.lpFile = _T("aa.exe");
sei.nShow = SW_SHOWDEFAULT;
ShellExecuteEx(&sei);

WaitForSingleObject(sei.hProcess, INFINITE);
CloseHandle(sei.hProcess);
...... // 代码行

方法二:

通过CreateProcess创建一个进程,然后进行等待。
STARTUPINFO si;
PROCESS_INFORMATION pi;

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

// 创建子进程
if( !CreateProcess( NULL, // No module name (use command line).
"MyChildProcess", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
ErrorExit( "CreateProcess failed." );
}

// 等待子进程退出
WaitForSingleObject( pi.hProcess, INFINITE );

// 关闭句柄
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

原文出处: http://hi.baidu.com/tracy_2008/item/650397097c7d12e1ff240d9d
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值