Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Приостановить выполнение приложения


Автор: amt 7.11.2004, 11:43
smile
У меня такая проблемка по VB.
По ходу выполнения приложение, написанное мною на VB, запускает command.com. При этом приложение продолжает выполнять свои операции.
Вопрос: как заставить приложение дождаться выполнения command.com и только потом продолжить выполнение своих функций?
Заранее благодарен.
amt

Автор: bom 7.11.2004, 13:49
'В модуле:

Код

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

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

     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 CloseHandle Lib "kernel32" (ByVal _
        hObject As Long) As Long

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

     Public Sub ExecCmd(cmdline$)
        Dim proc As PROCESS_INFORMATION
        Dim start As STARTUPINFO

        ' Инициализируем структуру STARTUPINFO:
        start.cb = Len(start)

        ' Запускаем приложение:
        ret& = CreateProcessA(0&, cmdline$, 0&, 0&, 1&, _
           NORMAL_PRIORITY_CLASS, 0&, 0&, start, proc)

        ' Ждем завершения запущенного приложения:
        ret& = WaitForSingleObject(proc.hProcess, INFINITE)
        ret& = CloseHandle(proc.hProcess)
     End Sub



В любом месте:
Код

'Запуск с ожиданием завершения:
ExecCmd ("c:\command.com")



Автор: amt 9.11.2004, 22:18
bom, Спасибо-о-о-О!
Твой код помог.
Маленький вопрос.
Можно ли запускать приложение (
Код

ExecCmd ("c:\command.com")
)
так, чтобы его окно не отображалось на экране. Я пробовал поковыряться в твоем коде но пока ничего не накопал.

Автор: Enflout 9.11.2004, 22:34
Посмотри в MSDN CreateProcess.

Автор: amt 9.11.2004, 22:37
Цитата
Посмотри в MSDN CreateProcess.

Templar$, я бы с радостью, но на данном этапе у меня такой возможности нет.
Может есть примерчик?

Автор: Enflout 9.11.2004, 22:46
Примерчик к сожалению есть только на C++. Могу лишь сказать, что wShowWindow должен содержать SW_HIDE. Туда и копай. Если надо выложу здесь сишный пример, переписывать увы времени просто нет. smile

Автор: cardinal 10.11.2004, 01:33
Templar$, выкладывай! Интересно посмотреть smile

Автор: bom 10.11.2004, 03:38
Константа SW_HIDE, о которой говорит Templar$, =0,
но почему то не получается запуск в скрытои режиме smile
За то при задании минимизированного режима - все нормально:
Код


' Инициализируем структуру STARTUPINFO:
        start.cb = Len(start)
        start.wShowWindow = 3


Автор: Enflout 10.11.2004, 13:44
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
si.dwFlags = STARTF_USESHOWWINDOW;
si.wShowWindow = SW_HIDE;
PROCESS_INFORMATION pi;
CreateProcess(NULL, "c:\\command.com", NULL, NULL, true, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);


Это кусок кода на C++, запускающий программу в скрытом виде. Счас попробую на vb переписать(вот только установлю) smile
Добавлено @ 13:49
Уфф...
Чет у меня вставка кода глючит... smile
Пришлось приводить как текст smile

Автор: Enflout 10.11.2004, 20:34
Я разобрался.
Цитата(bom @ 10.11.2004, 03:38)
Константа SW_HIDE, о которой говорит Templar$, =0,
но почему то не получается запуск в скрытои режиме
За то при задании минимизированного режима - все нормально:

Код 


' Инициализируем структуру STARTUPINFO:
         start.cb = Len(start)
         start.wShowWindow = 3





Надо добавить start.dwFlags = 1 и задать start.wShowWindow = 0
Вот так:

Код

' Инициализируем структуру STARTUPINFO:
        start.cb = Len(start)
        start.dwFlags = 1       
        start.wShowWindow = 0
       


Если что не так, поправьте меня. smile
Работоспособность проверил. smile

Автор: amt 11.11.2004, 14:56

Цитата
' Инициализируем структуру STARTUPINFO:
        start.cb = Len(start)
        start.dwFlags = 1       
        start.wShowWindow = 0

Все ОК. Спасибо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)