hola
creo que esto es lo que buscas:
en un modulo:
Option Explicit
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Public Const STILL_ACTIVE = &H103
Public Const PROCESS_QUERY_INFORMATION = &H400
Public Sub Ejecutar(Aplicacion As String)
Dim hProceso As Long 'Handle del proceso
Dim Activa As Long 'Valor devuleto por GetExitCodeProcess
Dim ret As Long
'Ejecutar la aplicacion, y quedarse con el handle (manipulador)
'del proceso, para poder controlar cuando termina
'VBNormalFocus hace que la aplicación comienze en una ventana normal
hProceso = OpenProcess(PROCESS_QUERY_INFORMATION, 0, Shell(Aplicacion, 1))
Do
'Obtiene información del proceso que iniciamos antes
ret = GetExitCodeProcess(hProceso, Activa)
'Para que siga funcionando el sistema normalmente,
'y se ejecuten los eventos
DoEvents
Loop While Activa = STILL_ACTIVE 'Sigue activa?
End Sub
En la forma:
Private Sub cmdEjecutar_Click()
Ejecutar Trim(ruta de la aplicacion)
'desde aqui se ejecutara cuando la apliocacion cierre
MsgBox "¡Listo! Ya terminó la aplicación ejecutada"
End Sub
saludos
hmtech