2017-05-05 157 views
0

這個問題與大多數關於ShellExecute的問題類似,但有一個例外:我想使用ShellExecute,因爲它使用起來很簡單,並且可以使用許多編程語言(包括現在已停用的Visual FoxPro)中的幾行來調用它。在ANY語言中調用Win32 ShellExecute時,如何在ShellExecute完成之前停止程序執行?

大多數現有的解決方案都依賴於線程處理,尋找進程(如果是常用進程名稱,則不可靠)或ShellExecuteEx,使用起來要複雜得多。我對其他解決方案並不滿意。

問題是我有一個文件操作,需要幾秒鐘才能完成:解壓縮存檔。我怎麼知道我已經完成了?

回答

0

解決方法是在執行的命令中創建一個semaphore。這可以通過運行一個批處理文件來完成,但是如果不理想,還有另一種方式與一行代碼使用的cmd.exe來處理它:

ShellExecute(0, 'open', 'cmd.exe', '/c 7z.exe e Invoices.zip | find "Everything is Ok" > semaphore.txt', workingDirectory, 1) 

這一個班輪使用CMD來管輸出7zip到查找,查找指示完成的文本行。當然,如果出現錯誤,這會失敗。

如果沒有輸出你等待(用於輸送到FIND),你可以使用&呼應正是如此:

... & echo > semaphore.txt 

此等待,直到......做了,那麼回聲一個換行符semaphore.txt。

最後,您的工作目錄中會有一個semaphore.txt文件。你所要做的就是查找這個文件出現,並且你知道執行完成了。刪除此文件並繼續執行您的程序。

相關問題