Pregunta: | 11694 - EJECUCION SINCRONA |
Autor: | J RC |
Hola a todos. Necesito saber como llamar a un programa EXE desde un formulario y esperar a que éste termine su ejecución para continuar con la ejecución de mi programa Visual Basic 5. Con la función Shell ya sé que no es posible. Gracias. |
Respuesta: | Gustavo Toro |
Creas un proceso con SHELL y despues haces una llamada a la API openProcess para obtener un ProcessHandle
Lugo la esperas con WaitforSingleObject. Ejemplo: Private Const SYNCHRONIZE = &H100000 Const PROCESS_QUERY_INFORMATION = &H400 Const INFINITE = -1& Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Public Function EjecutarSincrono(Ruta As String) As Boolean Dim proc_id As Long, resp As Long On Error GoTo fuera proc_id = Shell(Ruta, vbNormalFocus) resp = OpenProcess(PROCESS_QUERY_INFORMATION + SYNCHRONIZE, False, proc_id) Call WaitForSingleObject(resp, INFINITE) EjecutarSincrono = True Exit Function fuera: EjecutarSincrono = False End Function |
Respuesta: | Juan Palma |
Se puede hacer con API. El código para hacer esto lo puedes encontrar en la web de guille (http://guille.costasol.net). Ahí viene bien explicado como hacerlo. |