ShellExecuteA 函式 (shellapi.h)
在指定的檔案上執行作業。
語法
HINSTANCE ShellExecuteA(
[in, optional] HWND hwnd,
[in, optional] LPCSTR lpOperation,
[in] LPCSTR lpFile,
[in, optional] LPCSTR lpParameters,
[in, optional] LPCSTR lpDirectory,
[in] INT nShowCmd
);
參數
[in, optional] hwnd
類型:HWND
用於顯示 UI 或錯誤訊息之父視窗的句柄。 如果作業與視窗沒有關聯,這個值可以 NULL。
[in, optional] lpOperation
類型:LPCTSTR
null終止字串的指標,在此案例中稱為 動詞,指定要執行的動作。 可用的動詞集取決於特定檔案或資料夾。 一般而言,物件快捷功能表提供的動作是可用的動詞命令。 通常使用下列動詞:
編輯
啟動編輯器,並開啟檔以供編輯。 如果 lpFile 不是文件檔,函式將會失敗。
探討
探索 lpFile所指定的資料夾。
找到
從 lpDirectory所指定的目錄中起始搜尋。
打開
開啟 lpFile 參數所指定的專案。 專案可以是檔案或資料夾。
列印
列印由 lpFile所指定的檔案。 如果 lpFile 不是文件檔,則函式會失敗。
runas
以系統管理員身分啟動應用程式。 用戶帳戶控制 (UAC) 會提示使用者同意提高許可權執行應用程式,或輸入用來執行應用程式的系統管理員帳戶認證。
零
如果有的話,會使用默認動詞。 如果沒有,則會使用 「open」 動詞。 如果兩個動詞都無法使用,則系統會使用登錄中所列的第一個動詞。
[in] lpFile
類型:LPCTSTR
null 的指標終止字串,指定要在其中執行指定動詞命令的檔案或物件。 若要指定Shell命名空間物件,請傳遞完整剖析名稱。 請注意,並非所有物件都支援所有動詞。 例如,並非所有文件類型都支援「列印」動詞。 如果相對路徑用於 lpDirectory 參數,則不會針對 lpFile使用相對路徑。
[in, optional] lpParameters
類型:LPCTSTR
如果 lpFile 指定可執行檔,這個參數是 null終止字元串的指標,指定要傳遞至應用程式的參數。 此字串的格式取決於要叫用的動詞。 如果 lpFile 指定檔案,lpParameters 應該 NULL。
[in, optional] lpDirectory
類型:LPCTSTR
null終止字串的指標,指定動作的預設 (working) 目錄。 如果此值 NULL,則會使用目前的工作目錄。 如果在 lpFile提供相對路徑,請勿將相對路徑用於 lpDirectory。
[in] nShowCmd
類型:INT
旗標,指定開啟應用程式時要如何顯示。 如果 lpFile 指定檔檔,則旗標只會傳遞至相關聯的應用程式。 由應用程式決定如何處理。 它可以是可在 ShowWindow 函式的 nCmdShow 參數中指定的任何值。
傳回值
類型:HINSTANCE
如果函式成功,它會傳回大於 32 的值。 如果函式失敗,它會傳回錯誤值,指出失敗的原因。 傳回值會轉換成 HINSTANCE,以便與 16 位 Windows 應用程式回溯相容性。 然而,這不是真正的 HINSTANCE。 它只能轉換成 INT_PTR,而且與下列 32 或下列錯誤碼相較之下。
傳回碼 | 描述 |
---|---|
|
操作系統記憶體不足或資源。 |
|
找不到指定的檔案。 |
|
找不到指定的路徑。 |
|
.exe 檔案無效(.exe 映像中非 Win32 .exe 或錯誤)。 |
|
操作系統拒絕存取指定的檔案。 |
|
檔名關聯不完整或無效。 |
|
無法完成 DDE 交易,因為正在處理其他 DDE 交易。 |
|
DDE 交易失敗。 |
|
無法完成 DDE 交易,因為要求逾時。 |
|
找不到指定的 DLL。 |
|
找不到指定的檔案。 |
|
沒有與指定擴展名相關聯的應用程式。 如果您嘗試列印無法列印的檔案,也會傳回此錯誤。 |
|
記憶體不足,無法完成作業。 |
|
找不到指定的路徑。 |
|
發生共享違規。 |
言論
因為 ShellExecute 可以將執行委派給殼層延伸模組(數據源、操作功能表處理程式、動詞實作),因此應該先初始化 COM,再呼叫 ShellExecute。 某些 Shell 延伸模組需要 COM 單個線程 Apartment (STA) 類型。 在此情況下,應該初始化 COM,如下所示:
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
在某些情況下,ShellExecute 不會使用下列其中一種 Shell 擴充功能,而且這些實例完全不需要初始化 COM。 不過,在使用這個函式之前,一律 初始化 COM 是很好的作法。
這個方法可讓您在資料夾的快捷方式功能表中執行任何命令,或儲存在登錄中。
若要開啟資料夾,請使用下列其中一個呼叫:
ShellExecute(handle, NULL, <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
或
ShellExecute(handle, "open", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
若要探索資料夾,請使用下列呼叫:
ShellExecute(handle, "explore", <fully_qualified_path_to_folder>, NULL, NULL, SW_SHOWNORMAL);
若要啟動目錄的Shell尋找公用程式,請使用下列呼叫。
ShellExecute(handle, "find", <fully_qualified_path_to_folder>, NULL, NULL, 0);
如果 lpOperationNULL,函式會開啟 lpFile指定的檔案。 如果 lpOperation 為「開啟」或「探索」,函式會嘗試開啟或探索資料夾。
若要取得呼叫 ShellExecute而啟動之應用程式的相關信息,請使用 ShellExecuteEx。
注意
shellapi.h 標頭會將ShellExecute定義為別名,根據UNICODE預處理器常數的定義,自動選取此函式的ANSI或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
支援的最低伺服器 | Windows 2000 Server [僅限傳統型應用程式] |
目標平臺 | 窗戶 |
標頭 | shellapi.h |
連結庫 | Shell32.lib |
DLL | Shell32.dll (3.51 版或更新版本) |
另請參閱
啟動應用程式 (ShellExecute, ShellExecuteExecuteEx, SHELLEXECUTEINFO)