Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
Dim hproc As Long
Dim i As Integer
ZeroMemory(si,68);
si.cb=68 //68 размер структуры STARTUPINFO хотя лучше использовать какую-нить функцию для определения этого числа
si.dwFlags = &H1
si.wShowWindow = 4
hproc = CreateProcess("", "cmd.exe", 0, 0, False, &H4000000, 0, 0, si, pi)
While WaitForSingleObject(pi.hProcess,100)=WAIT_TIMEOUT
Wend
Слежение за процессом
Я сначало думал так: после загрузки файла xxx.exe с помощью АПИшной ф-ии получаю дискриптор активного окна, затем по дискриптору проверяю процесс раз в секунду напрмер загружен ли он, если нет то вывод сообщения.
Если кратко. Вообщем, эм спасибо.
2 Вопрос, чтото возник =) Вообще возможно прикрутить msdn 2003 к VB6.0? Хотя бы чисто гипотетически? Спасибо.
Если ты имееш хендл главного окна - просто с помощью функцыи GetWindowText проверяеш заголовок окна. Если он равен пустому буферу - значит окна не существует. Ето прокатит только тогда, когда заголовок окна не равен пустой строке.
Код:
правильность не гарантирую(редко на Basic'е пишу). не забудь определить функции и типы данных.
Спасибо, покумекаем над вашим предложением. И всё таки что насчёт msdn2003 и VB6.0? Реально ли их связать?
Цитата:
И всё таки что насчёт msdn2003 и VB6.0? Реально ли их связать?
Не сможешь. Юзай VB7 - это и есть 2003.
ИЛИ
Найди в интернете vb_tutor.chm и MegaFlash VB Help - это лучшая что ни на есть справка по VB6
Good Luck
Код:
Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
Dim hproc As Long
Dim i As Integer
ZeroMemory(si,68);
si.cb=68 //68 размер структуры STARTUPINFO хотя лучше использовать какую-нить функцию для определения этого числа
si.dwFlags = &H1
si.wShowWindow = 4
hproc = CreateProcess("", "cmd.exe", 0, 0, False, &H4000000, 0, 0, si, pi)
While WaitForSingleObject(pi.hProcess,100)=WAIT_TIMEOUT
Wend
Dim pi As PROCESS_INFORMATION
Dim hproc As Long
Dim i As Integer
ZeroMemory(si,68);
si.cb=68 //68 размер структуры STARTUPINFO хотя лучше использовать какую-нить функцию для определения этого числа
si.dwFlags = &H1
si.wShowWindow = 4
hproc = CreateProcess("", "cmd.exe", 0, 0, False, &H4000000, 0, 0, si, pi)
While WaitForSingleObject(pi.hProcess,100)=WAIT_TIMEOUT
Wend
правильность не гарантирую(редко на Basic'е пишу). не забудь определить функции и типы данных.[/QUOTE]
Размер структуры получается с помощью LenB/Len,а вместо WaitForSingleObject(pi.hProcess,100) лучше написать WaitForSingleObject(pi.hProcess,-1),чтобы он не прерывал процесс ожидания.И While не будет нужен,только проверяй значение WaitForSingleObject-ищи константы на Wait_
То что здесь описывалось, находила подобные тексты и на других форумах, но в итоге так запустить и не смогла... процедура CreateProcess всегда возвращала мне фалсе...
а вот этот вариант у меня работает...
Взято http://www.vbrussian.com/Trick.asp?ID=7
Запуск внешней программы с ожиданием ее завершения
Автор: Борис Рудой
Private Const INFINITE = &HFFFF
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwAccess As Long, _
ByVal fInherit As Integer, ByVal hObject As Long) As Long
Private Sub Command1_Click()
WaitForProcessToEnd "C:\test.BAT"
'Let the user know when the process is finished.
MsgBox "The process is finished! "
End Sub
Public Sub WaitForProcessToEnd(cmdLine As String)
'You can substitute a discrete time
'value in milliseconds for INFINITE.
Dim retVal As Long, pID As Long, pHandle _
As Long
pID = Shell(cmdLine)
pHandle = OpenProcess(&H100000, True, pID)
retVal = WaitForSingleObject(pHandle, INFINITE)
End Sub
Цитата: Kudri
... То что здесь описывалось, находила подобные тексты и на других форумах, но в итоге так запустить и не смогла...
Аналогичное решение не раз публиковалось и на этом форуме. Загляните, например, сюда:
http://forum.codenet.ru/showpost.php?p=68379&postcount=5