使用ShellExecuteEx启动外部应用程序并等待它初始化的方法如下:
- 首先,需要包含相关的头文件:#include<Windows.h>
#include <Shellapi.h>
#include<iostream>
#include<thread>
#include<chrono>
- 定义一个函数来启动外部应用程序并等待它初始化:bool ShellExecuteExAndWait(const std::wstring& lpFile, const std::wstring& lpParameters)
{
SHELLEXECUTEINFOW ShExecInfo = { 0 };
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFOW);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"open";
ShExecInfo.lpFile = lpFile.c_str();
ShExecInfo.lpParameters = lpParameters.c_str();
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
if (ShellExecuteExW(&ShExecInfo))
{
if (ShExecInfo.hProcess != NULL)
{
// 等待进程初始化
WaitForInputIdle(ShExecInfo.hProcess, INFINITE);
// 关闭进程句柄
CloseHandle(ShExecInfo.hProcess);
return true;
}
}
return false;
}
- 在主函数中调用该函数,启动外部应用程序并等待它初始化:int main()
{
std::wstring lpFile = L"C:\\Program Files\\Internet Explorer\\iexplore.exe";
std::wstring lpParameters = L"https://www.baidu.com";
if (ShellExecuteExAndWait(lpFile, lpParameters))
{
std::cout << "外部应用程序启动成功并等待初始化完成。"<< std::endl;
}
else
{
std::cout << "外部应用程序启动失败。"<< std::endl;
}
return 0;
}
注意:在实际使用中,需要根据实际情况修改lpFile
和lpParameters
的值。