вообщем проблема такая - из цикла формы1 грузится форма2, нужно цикл остановить, пока форма2 загружена, и возобновить цикл после выгрузки формы2. Проще пояснить не могу.
1. Можно завести какую-нить глобальную переменную вне формы, например в модуле
2. воспользоваться такой процедуркой:
Public/Private Function IsFormLoaded(ByVal sName as String) as Boolean Dim i as long for i=0 to forms.cout - vbnull If sName = Forms(i).Name Then IsFormLoaded = True: Exit Function Next End Function
Ну так вот, и просматривать переменную/значение функции в цикле, если переменная = ложь, то ничего не изменяя вставляем туда DoEvents и call Sleep(1&), причем если цикл со счетчиком (For), то надо не забыть изменить и значение этого счетчика в нужную сторону
Неважно, сколько ты к свойствам обращался той формы - ежели она у тебя не показана еще - можешь показать как модальную. Тебе же в ошибке пишут "форма уже отображена".
Если так, то сначала запускается proga1 и, не дожидаясь завершения, следом загружается proga2.
А надо, чтобы сначала proga1 завершилась, и уже после загрузилась proga2.
Заранее благодарю. Если можно подробно объясните, я VB почти не знаю. Был похожий вопрос по ссылке:
http://www.vbnet.ru/forum/show.aspx?id=75181
Но WMI я не знаю и не знаю как этим пользоваться.
Клево, с момента предыдущего поста (моего) в этой теме прошло ровно два года и три дня
По теме - в примерах ищи и по форуму, были такие топы, там через функции синхронизации (WaitForMultipleObjects и т.п.) все довольно просто делается.
Ладно, набаянил тут кое-че, оптимизацией сам займися
Option Explicit
Private Declare Function WaitForMultipleObjects Lib "Kernel32" (ByVal nCount As Long, ByRef lpHandles As Long, ByVal bWaitAll As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = -1&
Private Sub Form_Load()
Dim hProcess As Long, pID As Long
pID = Shell("C:\InterfaceLauncher.exe", vbNormalFocus)
hProcess = OpenProcess(SYNCHRONIZE, 0, pID)
If hProcess = 0 Then Exit Sub
WaitForMultipleObjects 1, hProcess, 0, INFINITE
MsgBox "Application closed"
End Sub