我用ShellExecute()调用一个外部的软件,如何等待这个外部软件执行结束后再运行C++代码啊?
时间: 2024-02-01 17:02:39 浏览: 125
可以使用WaitForSingleObject()函数来等待外部软件的结束。具体步骤如下:
1. 使用ShellExecute()函数来调用外部软件。
2. 获得外部软件的进程句柄,可以使用GetProcessId()函数来获取进程ID,然后使用OpenProcess()函数来打开进程句柄。
3. 使用WaitForSingleObject()函数等待进程结束,该函数会阻塞当前线程,直到进程结束。
4. 进程结束后,使用CloseHandle()函数关闭进程句柄。
下面是一个示例代码:
```c++
#include <Windows.h>
#include <tchar.h>
int main()
{
// 调用外部软件
ShellExecute(NULL, NULL, _T("notepad.exe"), NULL, NULL, SW_SHOWDEFAULT);
// 等待进程结束
HANDLE hProcess = NULL;
DWORD dwExitCode = 0;
do {
// 获取进程句柄
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | SYNCHRONIZE, FALSE, GetProcessId((HANDLE)hShellProcess));
// 等待进程结束
if (hProcess != NULL) {
WaitForSingleObject(hProcess, INFINITE);
GetExitCodeProcess(hProcess, &dwExitCode);
}
else {
break;
}
} while (dwExitCode == STILL_ACTIVE);
// 关闭进程句柄
CloseHandle(hProcess);
// 执行其他代码
// ...
return 0;
}
```
注意:在使用OpenProcess()函数打开进程句柄时,需要指定PROCESS_QUERY_INFORMATION和SYNCHRONIZE标志,否则会返回错误。同时,在使用WaitForSingleObject()函数等待进程结束时,需要将第二个参数设置为INFINITE,表示等待时间无限长。
阅读全文