RE:Ejecutar programa bajo MSDOS
Esperar a que un programa termine (incluso si es de MS-DOS) (32 bits) (31/Oct)
Una forma muchísimo más simplificada de la rutina que usaba hasta ahora, por supuesto, gracias al API.
Esta forma de hacerlo sólo es para 32 bits, para 16 bits lo puedes ver en: Especial Shell
La ventana se mostrará minimizada y sin foco.
No recuerdo si esta rutina la saqué de la Knowledge Base, lo que si es seguro es que fue del CD del MSDN-Library.
NOTA: Si se va a enviar un comando del DOS, se debe usar con:
Command /C <orden a ejecutar|fichero.bat>
sino, no se cerrará la ventana y el proceso no terminará, al menos algunas veces.
'Las declaraciones
Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Const STILL_ACTIVE = &H103
Const PROCESS_QUERY_INFORMATION = &H400
'Un procedimiento para ejecutar y esperar a que termine
Private Sub ExecCmdNoFocus(ByVal CmdLine As String)
'Esperar a que un proceso termine,
'la ventana se mostrará minimizada sin foco
Dim hProcess As Long
Dim RetVal As Long
'The next line launches CmdLine as icon,
'captures process ID
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, _
Shell(CmdLine, vbMinimizedNoFocus))
Do
%0