#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 最小化窗口,即使拥有该窗口的线程没有响应。仅当最小化来自不同线程的窗口时,才应使用此标志。