Запустить программу и ждать завершения, не вешая основной программы - VB

Узнай цену своей работы

Формулировка задачи:

Мне нужно запустить программу и дождаться её завершение, после продолжить работу Вот что я нашел, для реализации этого.
Листинг программы
  1. Private Type PROCESS_INFORMATION
  2. hProcess As Long
  3. hThread As Long
  4. dwProcessID As Long
  5. dwThreadID As Long
  6. End Type
  7. Private Type STARTUPINFO
  8. cb As Long
  9. lpReserved As String
  10. lpDesktop As String
  11. lpTitle As String
  12. dwX As Long
  13. dwY As Long
  14. dwXSize As Long
  15. dwYSize As Long
  16. dwXCountChars As Long
  17. dwYCountChars As Long
  18. dwFillAttribute As Long
  19. dwFlags As Long
  20. wShowWindow As Integer
  21. cbReserved2 As Integer
  22. lpReserved2 As Long
  23. hStdInput As Long
  24. hStdOutput As Long
  25. hStdError As Long
  26. End Type
  27.  
  28. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  29. Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, _
  30. ByVal lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
  31. ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
  32. ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
  33. lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) _
  34. As Long
  35.  
  36. Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
  37. Private Const INFINITE = -1&
  38. Private Const NORMAL_PRIORITY_CLASS = &H20&
  39. Dim FileName As String
  40.  
  41. Public Sub RunFile(FileName)
  42. Dim Process As PROCESS_INFORMATION
  43. Dim Prog As STARTUPINFO
  44. Prog.cb = Len(Prog)
  45. CreateProcessA 0&, FileName, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Prog, Process
  46. WaitForSingleObject Process.hProcess, INFINITE
  47. CloseHandle Process.hProcess
  48. End Sub
Код работает, но окно основной формы перестает перерисовываться. Возможно ничего страшного нет, но выглядит не красиво и кажется что всё повисло. Что поправить в коде или подскажите другой способ для реализации этой идеи ?

Решение задачи: «Запустить программу и ждать завершения, не вешая основной программы»

textual
Листинг программы
  1. '...58
  2. If CreateProcessA(CreateProcessA 0&, FileName, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Prog, Process) = 0 Then Unload Me: Exit Sub
  3. CloseHandle Process.hThread
  4. Do
  5.     DoEvents
  6.     'Здесь можно подвигать какой нибудь прогресс бар
  7. Loop Until WaitForSingleObject(Process.hProcess, 20) = 0
  8. '59...

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы