首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

ShellExecute 萬能開啟器:檔案、網頁、郵件、列印一行搞定

     編輯:關於VC++

核心觀念

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

關鍵參數

參數說明
lpVerbopen/print/edit/find/explore/properties
lpFile檔案路徑、URL、mailto:、ftp: 等
lpParameters傳遞給應用程式的參數
lpDirectory預設工作目錄
nShowCmdSW_SHOW/SW_HIDE/SW_MAXIMIZE...

回傳值判斷

回傳 HINSTANCE,值 > 32 表示成功;否則為錯誤碼(SE_ERR_*)。

進階:ShellExecuteEx

  • 支援 SEE_MASK_NOCLOSEPROCESS 取得進程句柄,可 WaitForSingleObject 等待結束
  • 支援 SEE_MASK_INVOKEIDLIST 呼叫殼擴展(如屬性頁)
  • 結構體 SHELLEXECUTEINFO 可控制更多行為
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved