需將多個參數 (含路徑、空格) 傳遞給外部 EXE,`SHELLEXECUTEINFO.lpParameters` 需為**單一字串**,參數間以空格分隔,**含空格的路徑必須雙引號包裹**。
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.lpVerb = _T("open");
sei.lpFile = _T("C:\\Tools\\Office2Pdf.exe"); // 目標程式
// 參數:"輸入檔路徑" "輸出檔路徑"
sei.lpParameters = _T("\"C:\\Docs\\My File.docx\" \"C:\\Output\\Result.pdf\"");
sei.nShow = SW_HIDE; // 或 SW_SHOW
ShellExecuteEx(&sei);
CString BuildParams(const std::vector<CString>& args) {
CString cmd;
for (const auto& arg : args) {
if (!cmd.IsEmpty()) cmd += _T(" ");
// 含空格或特殊字元則加引號
if (arg.FindOneOf(_T(" \t\"")) >= 0) {
cmd += _T("\"") + arg + _T("\"");
} else {
cmd += arg;
}
}
return cmd;
}
// 使用
std::vector<CString> params = { inputPath, outputPath };
sei.lpParameters = BuildParams(params);
遵循「整體字串、逐參加引號、空格分隔」原則,`lpParameters` 即可穩定傳遞任意多參數。