Запуск приложений с задержкой
Вы наверняка сталкивались (а если нет то столкнётесь) с проблемой наподобие следующей. Вы запустили консольное приложение, перенаправив вывод в файл, а при попытке прочесть получили ошибку "Доступ закрыт(Permission Denied)". Легко догадаться, что ошибка возникла из-за того, что консольное приложение не завершило вывод в файл, а Вы уже из него читаете.Возникает вопрос - Что делать? Ответ: Использовать API!
Ниже я приведу код, позволяющий приостановить Вашу программу (точнее поток), до того момента, как вызванная программазакончит свою работу.
Public Function ShellWait(ByVal CommandString As String, Optional ShowCommand As VbAppWinStyle = vbNormalFocus) As Long
" Необходимые переменные
Dim phnd As Long, pid As Long, StartSec As Long
" Засекаем время
StartSec = Timer
" Выполняем команду
pid = Shell(CommandString, ShowCommand)
" Получаем манипулятор процесса
phnd = OpenProcess(SYNCHRONIZE, 0, pid)
If phnd <> 0 Then
" Вечно ожидаем завершения процесса
Call WaitForSingleObject(phnd, INFINITE)
" Закрываем манипулятор
Call CloseHandle(phnd)
End If
ShellWait = Timer - StartSec " Возвращаем прошедшее время
End Function
Этот код застрахует Вас от преждевременных операций, с данными принадлежащими лругому приложению, однако у него естьпобочный эффект: Ваше приложение "заморозиться" до завершения запущенной программы, и не будет реагировать ни на что. Так что не забудьте сообщить пользователю, что так и должно быть.