首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ ShellExecuteEx lpParameters 多參數傳遞正確格式

     編輯:程式設計綜合問答

需將多個參數 (含路徑、空格) 傳遞給外部 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);

關鍵規則

  1. 整個參數字串用 `_T("...")` 包裹 (Unicode 專案)。
  2. **每個獨立參數若含空格,單獨用雙引號包裹** (`"C:\My Docs\file.pdf"`)。
  3. 參數間以**單一空格**分隔,不可多餘空格。
  4. 若參數本身含雙引號,需轉義 `\"` (C++ 字串字面量中寫 `\\\"`)。

動態組裝輔助函數

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);

驗證技巧

  • 在目標 EXE `main(int argc, char* argv[])` 中列印 `argc` 與每個 `argv[i]`,確認分割正確。
  • 或建立批次檔 `test.bat`:`@echo off & echo %%1=%1 & echo %%2=%2 & pause`,設 `lpFile=test.bat` 測試參數傳遞。

遵循「整體字串、逐參加引號、空格分隔」原則,`lpParameters` 即可穩定傳遞任意多參數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved