Window下,C++调用exe程序并等待程序执行完成,使用ShellExecuteEx

#include <iostream>

std::string command = "arg1";

int main(void){
    SHELLEXECUTEINFO  ShExecInfo = { 0 };
    ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
    ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
    ShExecInfo.hwnd = NULL;
    ShExecInfo.lpVerb = NULL;
    ShExecInfo.lpFile = L".\\a.exe"; // 预执行程序
    ShExecInfo.lpParameters = STDString2LPCWCH(command); // 参数
    ShExecInfo.lpDirectory = NULL;
    ShExecInfo.nShow = SW_SHOWMINIMIZED; // 隐藏执行
    ShExecInfo.hInstApp = NULL;
    ShellExecuteEx(&ShExecInfo);

    // 等待
    WaitForSingleObject(ShExecInfo.hProcess, INFINITE);

    return 0;
}


// std::string 转 LPCWCH
LPWSTR STDString2LPCWCH(const std::string strcs)
{
    UINT len = MultiByteToWideChar(CP_ACP, 0, strcs.c_str(), -1, NULL, 0);
    LPWSTR  wszasc = new WCHAR[len + 1];
    MultiByteToWideChar(CP_ACP, 0, strcs.c_str(), -1, wszasc, len);
    return wszasc;
}
nShow 参数

SW_HIDE 隐藏窗口并激活另一个窗口。
SW_SHOWNORMAL | SW_NORMAL 激活并显示一个窗口。如果窗口最小化或最大化,系统会将其恢复到其原始大小和位置。应用程序应在首次显示窗口时指定此标志。
SW_SHOWMINIMIZED 激活窗口并将其显示为最小化的窗口。
SW_SHOWMAXIMIZED | SW_MAXIMIZE 激活窗口并将其显示为最大化窗口。
SW_SHOWNOACTIVATE 以窗口的最新大小和位置显示窗口。此值类似于SW_SHOWNORMAL,只是窗口未激活。
SW_SHOW 激活窗口并以当前大小和位置显示窗口。
SW_MINIMIZE 最小化指定的窗口并按 Z 顺序激活下一个顶级窗口。
SW_SHOWMINNOACTIVE 将窗口显示为最小化的窗口。此值类似于SW_SHOWMINIMIZED,只是窗口未激活。
SW_SHOWNA 以窗口的当前大小和位置显示窗口。此值类似于SW_SHOW,只是窗口未激活。
SW_RESTORE 激活并显示窗口。如果窗口最小化或最大化,系统会将其恢复到其原始大小和位置。应用程序应在还原最小化的窗口时指定此标志。
SW_SHOWDEFAULT 根据启动应用程序的程序传递给 CreateProcess 函数的 STARTUPINFO 结构中指定的SW_值设置显示状态。
SW_FORCEMINIMIZE 最小化窗口,即使拥有该窗口的线程没有响应。仅当最小化来自不同线程的窗口时,才应使用此标志。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值