ShellExecute 會自動查詢 HKEY_CLASSES_ROOT 檔案關聯,決定呼叫哪個應用程式,並支援 DDE 重用現有實例。完全不需知道具體執行檔路徑。
// 開啟圖片(自動用關聯檢視器:畫圖/Photoshop/...)
ShellExecute(nullptr, L"open", L"photo.jpg", nullptr, nullptr, SW_SHOWNORMAL);
// 開啟網頁
ShellExecute(nullptr, L"open", L"https://www.microsoft.com", nullptr, nullptr, SW_SHOWNORMAL);
// 發送郵件
ShellExecute(nullptr, L"open", L"mailto:user@example.com?subject=Hello", nullptr, nullptr, SW_SHOWNORMAL);
// 列印文件
ShellExecute(nullptr, L"print", L"report.doc", nullptr, nullptr, SW_HIDE);
// 開啟資料夾
ShellExecute(nullptr, L"explore", L"C:\\Projects", nullptr, nullptr, SW_SHOWNORMAL);
// 顯示檔案屬性對話框
SHELLEXECUTEINFO sei = { sizeof(sei) };
sei.fMask = SEE_MASK_INVOKEIDLIST;
sei.lpVerb = L"properties";
sei.lpFile = L"C:\\";
ShellExecuteEx(&sei);
| 參數 | 說明 |
|---|---|
| lpVerb | open/print/edit/find/explore/properties |
| lpFile | 檔案路徑、URL、mailto:、ftp: 等 |
| lpParameters | 傳遞給應用程式的參數 |
| lpDirectory | 預設工作目錄 |
| nShowCmd | SW_SHOW/SW_HIDE/SW_MAXIMIZE... |
回傳 HINSTANCE,值 > 32 表示成功;否則為錯誤碼(SE_ERR_*)。
SEE_MASK_NOCLOSEPROCESS 取得進程句柄,可 WaitForSingleObject 等待結束SEE_MASK_INVOKEIDLIST 呼叫殼擴展(如屬性頁)SHELLEXECUTEINFO 可控制更多行為