在ANY语言中调用Win32 ShellExecute时,如何在ShellExecute完成之前停止程序执行?

问题描述:

这个问题与大多数关于ShellExecute的问题类似,但有一个例外:我想使用ShellExecute,因为它使用起来很简单,并且可以使用许多编程语言(包括现在已停用的Visual FoxPro)中的几行来调用它。在ANY语言中调用Win32 ShellExecute时,如何在ShellExecute完成之前停止程序执行?

大多数现有的解决方案都依赖于线程处理,寻找进程(如果是常用进程名称,则不可靠)或ShellExecuteEx,使用起来要复杂得多。我对其他解决方案并不满意。

问题是我有一个文件操作,需要几秒钟才能完成:解压缩存档。我怎么知道我已经完成了?

解决方法是在执行的命令中创建一个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文件。你所要做的就是查找这个文件出现,并且你知道执行完成了。删除此文件并继续执行您的程序。