天天看點

ShellExecuteEx的一種玩法

請大家先看看下面的示例代碼:

ShellExecuteEx的一種玩法

上面代碼十分簡單,在調用ShellExecuteEx時,我們通過SHELLEXECUTEINFO結構體傳入了兩個參數:第一個是動作謂詞(verb),另一個是需要執行此動作的目标檔案。請注意,因為這個函數體中的代碼執行完之後會立即傳回,是以我們需要添加一個SEE_MASK_FLAG_DDEWAIT标志:通常情況下,ShellExecuteEx會認為當它傳回之後,應用程式會維護一個消息循環。這就可以實作函數傳回之後繼續執行接下來那些必要的DDE互動,因為DDE伺服器會傳回對應的響應。

但是,如果線程直接退出了,或者此線程不是一個圖形界面線程(GUI Thread),在這個例子中,這兩個條件都得到了滿足,你需要添加這個标志向作業系統表明:我這沒有實作任何的消息處理循環,是以也沒有辦法完成接下來的DDE互動。通過設定SEE_MASK_FLAG_DDEWAIT标志,應用程式就是在告訴ShellExecuteEx:請你在傳回之前完成所有的DDE互動操作。

不管怎樣,我的本意是希望能示範如何使用動作謂詞。因為看起來有一些朋友還沒有意識到還可以這樣玩,例如:

> shex find %windir%

此動作可以打開搜尋視窗,并指定預設搜尋的檔案夾。

> shex openas C:\AUTOEXEC.BAT

此動作可以打開”打開方式”對話框,并指定目标檔案。

總結

最後