Trucos y tretas
 
Ejecutar un programa de forma síncrona

Regresar al menú "Trucos"
Principal


Autor: Desconocido
Comentarios: José Rubí de la Vega
Fecha: 4 de octubre de 1998
Fuente: Página de José Rubí (http://www.jrubi.com)
Descripción: Ejecutar un programa de forma síncrona

La función que se explica a continuación sirve para ejecutar programas DOS y Windows y que no nos devuelve el control hasta que finaliza la ejecución de los mismos.

Un caso "especial" es ejecutar accesos directos o archivos registrados y hablaremos del tema al final de este artículo.

En un formulario:

Option Explicit

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

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
      ' Get the status of the process
      GetExitCodeProcess hProcess, RetVal
      ' Sleep command recommended as well
      ' as DoEvents
      DoEvents
      Sleep 100
      ' Loop while the process is active
   Loop While RetVal = STILL_ACTIVE

End Sub

Para ejecutar un programa DOS o Windows:

ExecCmdNoFocus("Nombre del programa")

Para ejecutar un acceso directo:

ExecCmdNoFocus("start /w "+chr$(34) + "Nombre.lnk" + chr$(34))

Para "ejecutar" un fichero de extensión reconocida por el sistema haremos algo similar al ejemplo de accesos directos:

ExecCmdNoFocus("start /w "+chr$(34) + "Nombre.extension" + chr$(34))

En estos últimos dos ejemplos la aplicación no aparece minimizada ya que es lanzada por "start", no por nuestra función, por lo que debemos indicar el estado mediante los parámetros adecuados del comando "start" (/m[inimizado], /max[imizado] o /r[estaurado]).



Arriba
Regresar al menú "Trucos"
Principal

Derechos reservados © 2001 Daniel Quintero Rojas (dqrsoftware@gmx.net)