2017-05-05 4 views
0

この質問はShellExecuteのほとんどの点に似ていますが、1つ例外があります.ShellExecuteを使用するのは簡単で使いやすいので、今すぐ起動したVisual FoxProを含む多くのプログラミング言語から数行で呼び出すことができます。どの言語でも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に出力します。これは、完了を示すテキスト行を探します。もちろん、エラーがあれば失敗します。

あなたは(FINDへの配管用)を待つの出力を持っていない場合、あなたは& thuslyエコー使用することができます。

... & echo > semaphore.txt 

...が完了するまでこれが待機し、その後に改行をエコー表示semaphore.txt。

最後に、作業ディレクトリ内にsemaphore.txtファイルがあります。あなたがしなければならないことは、このファイルが現れるのを見て、実行が完了したことを知っていることです。このファイルを削除し、プログラムを続行します。

関連する問題