Запустить и дождатся завершения?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sasha_karasov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 436
Зарегистрирован: 03.03.2005 (Чт) 19:38
Откуда: ua.dp

Запустить и дождатся завершения?

Сообщение Sasha_karasov » 27.12.2005 (Вт) 3:15

У меня такой вопрос:
Например есть программа, ее нужно запустить и дождатся завершения?
Как мне это сделать?
P.S. Пардон за баян :( ,но я даже не знаю кл.слова для поиска.
Удачи!
С уважением, Алексадр.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 27.12.2005 (Вт) 3:30

ShellExecute. Если меня не глючит, один из параметров его как раз отвечает за дожидание завершения запущенной программы. Но могу ошибаться - MSDN под рукой нет...
Или по таймеру перебирать все запущенные процесы, пока нужный будет висеть в памяти :lol:
То, что для одних константа, для других только переменная...

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 27.12.2005 (Вт) 3:32

Нет, с ShellExecute прогнал, сорри :(
То, что для одних константа, для других только переменная...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Запустить и дождатся завершения?

Сообщение GSerg » 27.12.2005 (Вт) 3:47

Sasha_karasov писал(а):но я даже не знаю кл.слова для поиска.

Прикинь, ключевое слово "дождаться"...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Sasha_karasov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 436
Зарегистрирован: 03.03.2005 (Чт) 19:38
Откуда: ua.dp

Сообщение Sasha_karasov » 27.12.2005 (Вт) 4:10

Блин я сейчас усну! Но мне очень нужно, у меня сейчас башка не варит. А в среду нужно сдать прогу. Я просто где-то видел исходник там там exe ник открывается а после закрытия проги, вылизиет MsgBox. Но не могу не где нейти. Если есть у кого-то дайте! :cry:
Удачи!
С уважением, Алексадр.

Sasha_karasov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 436
Зарегистрирован: 03.03.2005 (Чт) 19:38
Откуда: ua.dp

Сообщение Sasha_karasov » 27.12.2005 (Вт) 5:06

Ну помогит блин ну строчно нужно! Вам 5 минут написать мне 2 чиса искать, вы люди ли нет?
Удачи!
С уважением, Алексадр.

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 27.12.2005 (Вт) 5:45

GSerg писал(а): Если тебе надо блокировать основной поток (с заморозкой интерфейса и неотвечанием программы), то используй WaitForSingleObject.

А если не надо блокировать поток, то контрол от GSerg в кирпичах Waiter называется.
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 27.12.2005 (Вт) 9:08

Sasha_karasov писал(а):Ну помогит блин ну строчно нужно! Вам 5 минут написать мне 2 чиса искать, вы люди ли нет?

Это кому надо, тебе или другим?
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.12.2005 (Вт) 9:34

Sasha_karasov писал(а):Ну помогит блин ну строчно нужно! Вам 5 минут написать мне 2 чиса искать, вы люди ли нет?


Ищи по CreateProcess.
Здесь или в API-Guide.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.12.2005 (Вт) 11:42

Да в примере к Waiter'у ожидание завершения есть! Зачем "Поиск", зачем гайд?
Изображение

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 27.12.2005 (Вт) 11:46

keks-n писал(а):Да в примере к Waiter'у ожидание завершения есть! Зачем "Поиск", зачем гайд?


Ну не знаю... Если нужно запустить консольное приложение (тот-же архиватор) - тебе хочется лицезреть его окно? А передать ему большой список файлов как получше? А указать текущий каталог для него?

В общем, тут каждый решает сам. Но одного примитивного ожидания в большинстве случаев нехватает.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

AndreyIl
Обычный пользователь
Обычный пользователь
 
Сообщения: 82
Зарегистрирован: 18.10.2005 (Вт) 16:17
Откуда: г. Брянск

Сообщение AndreyIl » 27.12.2005 (Вт) 12:10

Кидаешь на форму таймер. Устанавливаешь интервал по вкусу: Timer1.Interval=1000.

Private Sub Timer1_Timer()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Notepad.exe'")
For Each objProcess In colProcessList
Exit Sub
Next
MsgBox "Блокнот закрыт"
End Sub

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.12.2005 (Вт) 12:30

Извращенец...
Waiter'ом поэлегантнее было, да и реакция СРАЗУ была, а не по прошествию некоторого времени.
Изображение

Lumen
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 841
Зарегистрирован: 03.12.2005 (Сб) 16:09
Откуда: Брянск

Сообщение Lumen » 27.12.2005 (Вт) 12:33

Используй WaitForSingleObject с параметром, по-моему, APP_INFINITE или что-то вроде этого. Сейчас не в том состоянии, чтобы вспомнить, клава двоится :wink:.Когда просохну от пьянки - вспомню.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 27.12.2005 (Вт) 12:41

WaitForSingleObject используется в Waiter'е. Зачем изобретать велосипед, если есть готовая компонента? Да еще и поток не замораживающая?
Изображение

Sasha_karasov
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 436
Зарегистрирован: 03.03.2005 (Чт) 19:38
Откуда: ua.dp

Сообщение Sasha_karasov » 29.12.2005 (Чт) 4:46

Lumen писал(а):Используй WaitForSingleObject с параметром, по-моему, APP_INFINITE или что-то вроде этого. Сейчас не в том состоянии, чтобы вспомнить, клава двоится :wink:.Когда просохну от пьянки - вспомню.
Пасиба.
Код: Выделить всё
Public Enum PriorityEnum
  NORMAL_PRIORITY_CLASS = &H20
  IDLE_PRIORITY_CLASS = &H40
  HIGH_PRIORITY_CLASS = &H80
End Enum

Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
Private Declare Function SetPriorityClass Lib "kernel32" (ByVal hProcess As Long, ByVal dwPriorityClass As Long) As Long

Public Enum WindowStyle
  SW_HIDE = 0
  SW_NORMAL = 1
  SW_MAXIMIZE = 3
  SW_MINIMIZE = 6
End Enum

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 GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const INFINITE = -1&
Private Const STARTF_USESHOWWINDOW = &H1
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 Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessID As Long
  dwThreadID As Long
End Type

Public Enum VKeyEnum
  VK_SHIFT = &H10
  VK_CONTROL = &H11
  VK_LSHIFT = &HA0
  VK_RSHIFT = &HA1
  VK_LCONTROL = &HA2
  VK_RCONTROL = &HA3
End Enum

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


'**********************************************************
' Âûïîëíåíèå êîììàíäíîé ñòðîêè
'----------------------------------------------------------
Public Function SystemExecute(ByRef CmdLine As String, Optional Show As WindowStyle = SW_NORMAL) As Long
Dim proc As PROCESS_INFORMATION
Dim start As STARTUPINFO
Dim Res As Long
 
  ' Initialize the STARTUPINFO structure:
  start.cb = Len(start)
  start.dwFlags = STARTF_USESHOWWINDOW
  start.wShowWindow = Show
 
  ' Start the shelled application:
  Res = CreateProcessA(0&, CmdLine$, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

  ' Wait for the shelled application to finish:
  Res = WaitForSingleObject(proc.hProcess, INFINITE)
  Call GetExitCodeProcess(proc.hProcess, Res)
  Call CloseHandle(proc.hThread)
  Call CloseHandle(proc.hProcess)
  SystemExecute = Res
End Function

Private Sub Form_Load()
SystemExecute "notepad.exe"
MsgBox "CLOSE
End Sub

а если я lnk открываю, как быть?
Удачи!
С уважением, Алексадр.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 178

    TopList