Программирование на Visual Basic

Запуск приложений с задержкой

    Вы наверняка сталкивались (а если нет то столкнётесь) с проблемой наподобие следующей. Вы запустили консольное приложение, перенаправив вывод в файл, а при попытке прочесть получили ошибку "Доступ закрыт(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


    Этот код застрахует Вас от преждевременных операций, с данными принадлежащими лругому приложению, однако у него естьпобочный эффект: Ваше приложение "заморозиться" до завершения запущенной программы, и не будет реагировать ни на что. Так что не забудьте сообщить пользователю, что так и должно быть.

Hosted by uCoz