說說ShellExecuteEx


今天來說說ShellExecuteEx這個函數,先翻譯MSDN,然后看個樣例。

 

ShellExecuteEx Function

對指定應用程序運行某個操作

語法:

BOOL ShellExecuteEx(      
    LPSHELLEXECUTEINFO lpExecInfo
);

參數:

lpExecInfo

[in, out] 一個指向 SHELLEXECUTEINFO 結構的指針,用來傳遞和保存應用程序運行相關的信息。

返回值:

假設函數成功運行就返回TRUE,否則返回 FALSE 。可調用 GetLastError 獲取錯誤信息。

備注:

因為ShellExecuteEx 可以將運行托付給那些由組件對象模型COM激活的Shell 擴展(數據源,上下文菜單句柄,動詞實現),因此在調用ShellExecuteEx 之前要先初始化 COM。某些Shell 擴展要求單線程單元模型的COM,在這樣的情況下,應當像以下一般初始化COM

 

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)
 

在某些情況下 ShellExecuteEx 並沒有使用這樣的類型的Shell 擴展,這時就無需初始化COM。盡管如此,總是在使用這個函數之前初始化COM是個不錯的舉措。

假設有多個顯示器,而且你指定了一個HWND 同一時候設置lpExecInfo 的成員lpVerb "Properties",那么由ShellExecuteEx 創建的不論什么窗體都有可能顯示在不對的位置上。

假設這個函數運行成功,它會設置 SHELLEXECUTEINFO hInstApp 成員為一個大於32的值。假設函數運行失敗,hInstApp 成員被設置為SE_ERR_XXX(提示失敗的原因)。盡管為了兼容16位的windows應用程序hInstApp 被聲明成一個句柄,但它並非一個句柄。它僅僅能被轉型為整數,並同32SE_ERR_XXX之類的錯誤代碼比較。

提供SE_ERR_XXX 之類的錯誤代碼是為了兼容ShellExecute使用GetLastError能夠獲得更具體的錯誤信息。返回值能夠使下列之中的一個:

Error

Description

ERROR_FILE_NOT_FOUND

指定文件不存在

ERROR_PATH_NOT_FOUND

指定路徑不存在

ERROR_DDE_FAIL

動態數據交換 (DDE) 處理失敗

ERROR_NO_ASSOCIATION

沒有與制定文件名稱擴展相應的應用程序

ERROR_ACCESS_DENIED

訪問指定文件被拒絕

ERROR_DLL_NOT_FOUND

無法找到執行應用程序所必須的庫文件

ERROR_CANCELLED

這個函數要求用戶提供很多其它其它信息(譯注:比方彈出對話框),但請求用戶被取消了

ERROR_NOT_ENOUGH_MEMORY

沒有足夠的內存來運行操作

ERROR_SHARING_VIOLATION

共享違規發生了

Windows 95/98/Me: ShellExecuteEx Microsoft Layer for Unicode (MSLU)所支持。為了使用這個函數,必須加入額外的文件到應用程序中去,請參考:Microsoft Layer for Unicode on Windows Me/98/95 Systems.

 

函數信息:

Minimum DLL Version

shell32.dll version 3.51 or later

Custom Implementation

No

Header

shellapi.h

Import library

shell32.lib

Minimum operating systems

Windows NT 4.0, Windows 95

Unicode

Implemented as ANSI and Unicode versions

 

 

 

以下舉例說明怎樣使用這個函數,executePackage 這個函數用來運行某個應用程序。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM