powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как дождаться завершения выполнения Shell?
5 сообщений из 5, страница 1 из 1
Как дождаться завершения выполнения Shell?
    #32459475
Yuri_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При запуске сторонней программы с помощью shell

Shell("C:1.bat", vbNormalFocus)

msgbox "A"

что нужно сделать сделать чтобы сообщение А появлялось по завершению выполнения программы, а не в момент ее запуска?
...
Рейтинг: 0 / 0
Как дождаться завершения выполнения Shell?
    #32459648
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1.Выводить сообщения из той программы которую запускаешь.
2. Передавать сообщение об окончании выполнения в эту. Тут несколько способов есть. один из них - колбэк (callback) т.е. вызываешь метод передавая адрес другого метода(из первой программы с помошью AddressOF), по окончании работы идет колбэк и выводится сообщение. Асинхронно.



Magnus
...
Рейтинг: 0 / 0
Как дождаться завершения выполнения Shell?
    #32460051
Yuri_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо большое за ответ.
...
Рейтинг: 0 / 0
Как дождаться завершения выполнения Shell?
    #32460253
Hibernate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а проще без Shell:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
Private Declare Function CreateProcessA Lib  "kernel32"  (ByVal _
   lpApplicationName As Long, ByVal lpCommandLine As String, ByVal _
   lpProcessAttributes As Long, ByVal lpThreadAttributes As Long, _
   ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, _
   ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, _
   lpStartupInfo As STARTUPINFO, lpProcessInformation As _
   PROCESS_INFORMATION) As Long

Private Declare Function WaitForSingleObject Lib  "kernel32"  (ByVal _
   hHandle As Long, ByVal dwMilliseconds As Long) As Long

Private Declare Function CloseHandle Lib  "kernel32"  (ByVal _
   hObject As Long) As Long

Private Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessID As Long
  dwThreadID As Long
End Type

Private Type STARTUPINFO
   cb As Long
   lpReserved As String
   lpDesktop As String
   lpTitle As String
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type

Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const INFINITE = - 1 &

Public Sub ExecCmd(CmdLine$)
   Dim proc As PROCESS_INFORMATION
   Dim start As STARTUPINFO
   Dim ret As Long
   ' Initialize the STARTUPINFO structure:
   start.cb = Len(start)
   ' Start the shelled application:
   start.dwFlags =  1  'чтоб окно было невидимым...
   
   ret& = CreateProcessA(0&, CmdLine$, 0&, 0&, 1&, _
        NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)
        
   ' Wait for the shelled application to finish:
   ret& = WaitForSingleObject(proc.hProcess, INFINITE)
   ret& = CloseHandle(proc.hProcess)
End Sub
...
Рейтинг: 0 / 0
Как дождаться завершения выполнения Shell?
    #32460780
Yuri_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромная благодарность Hibernate за помощь,
ваш вариант как раз подошел.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как дождаться завершения выполнения Shell?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]