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

Windows 程式啟動外部應用程式:WinExec 與 ShellExecute 比較

     編輯:關於C++

WinExec:簡單但功能有限

UINT WinExec(LPCSTR lpCmdLine, UINT uCmdShow);
  • lpCmdLine:命令列字串(以 null 結尾)。
  • uCmdShow:視窗顯示方式(SW_SHOWNORMAL、SW_HIDE、SW_MAXIMIZE、SW_MINIMIZE 等)。

範例: WinExec("notepad c:\\hdc.txt", SW_SHOWNORMAL);

返回值: 成功返回 ≥31;失敗返回錯誤碼(0=記憶體不足、ERROR_BAD_FORMAT、ERROR_FILE_NOT_FOUND、ERROR_PATH_NOT_FOUND)。

缺點: 僅能執行 .exe,無法透過檔案關聯開啟文件(如 WinExec("1.html", ...) 無效)。為相容 16 位 Windows 保留,新開發不建議使用。

ShellExecute:功能強大、支援檔案關聯

HINSTANCE ShellExecute(
    HWND hwnd,           // 父視窗控制碼
    LPCTSTR lpOperation, // 操作動詞:"open"、"print"、"explore"、NULL(預設)
    LPCTSTR lpFile,      // 目標檔案或可執行檔
    LPCTSTR lpParameters,// lpFile 為可執行檔時的參數
    LPCTSTR lpDirectory, // 工作目錄
    INT nShowCmd         // 顯示方式,同 WinExec
);

常見用法範例

  • 開啟文字檔(透過關聯): ShellExecute(Handle, "", "c:\\hdc.txt", "", "", SW_SHOWNORMAL);
  • 指定程式開啟: ShellExecute(Handle, "open", "notepad", "c:\\hdc.txt", "", SW_SHOWNORMAL);
  • 開啟網頁/郵件: ShellExecute(Handle, "", "https://www.example.com", "", "", SW_SHOWNORMAL); / ShellExecute(Handle, "", "mailto:user@example.com", "", "", SW_SHOWNORMAL);

超連結標籤實作

在表單放置兩個 Label,Caption 分別設為網址與 mailto 連結,字體設藍色底線,Click 事件呼叫 ShellExecute(Handle, "", Label->Caption, "", "", SW_SHOWNORMAL); 即可實現超連結效果。

返回值與錯誤處理

成功返回實例控制碼 (>32);失敗返回 ≤32 的錯誤碼(如 SE_ERR_FNF、SE_ERR_PNF、SE_ERR_ACCESSDENIED、SE_ERR_OOM 等),詳見 MSDN。

ShellExecuteEx 與總結

ShellExecuteEx 提供更精細控制(如等待結束、取得進程 ID),但較複雜且早期不支援 NT。建議統一使用 ShellExecute,功能完整涵蓋 WinExec 且支援檔案關聯、URL 協定,是現代 Windows 開發首選。

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