Clase para arrancar aplicaciones síncrona y asíncronamente (controla tamaño y posición de la ventana, etc.)
Esta clase permite lanzar procesos (aplicaciones) controlando su finalización y obteniendo el código de retorno (ErrorLevel) de la misma. También permite cancelar un proceso en marcha.
Las últimas modificaciones han sido : modificar la propiedad HuboError que ahora es un long y añadir las propiedades DescrError y ErrorLevel.
Como veremos más adelante podemos lanzar los procesos de tres modos :
- Síncrono : Nuestro programa se detiene y la clase no devuelve el control hasta que finalizó la ejecución del proceso. Es el modo por defecto.
- Asíncrono con aviso : Nuestra aplicación sigue ejecutándose y recibe un evento de la clase cuando finaliza la ejecución del proceso. Para este modo la clase debe declarse "WithEvents" y debe pasársele un control Timer.
- Asíncrono : nuestra aplicación continua ejecutándose. Es similar al Shell de Visual Basic pero tenemos una propiedad para saber si continua en ejecución.
Acabo de hacerla para un compañero de la lista que necesitaba el modo "Asíncrono con aviso" y apenas he tenido tiempo de probarla pero creo que funciona correctamente. Si alguien realiza alguna corrección o cualquier mejora estaré encantado de publicarla.
METODOS- Ejecutar : Ejecuta el comando especificado en la propiedad LineaComandos.
- CancelarProceso : Cancela el proceso lanzado por el método Ejecutar. Sólo tiene utilidad en los modos Asíncrono y Asíncrono con aviso ya que en el modo Síncrono cuando queramos ejecutarlo el proceso ya habrá finalizado.
Usar sólo en casos de necesidad ya que las salidas "forzosas" no son aconsejables.
PROPIEDADES- LineaComando : Contiene el comando a ejecutar, incluyendo los parámetros. Es posible que los nombres largos deban introducirse entre comillas dependiendo del S.O.
- ModoEjecucion : Indica el modo de ejecución del comando (Síncrono, Asíncrono con aviso o Asíncrono).
- ShowWindow : Establece cómo se muestra la ventana de la aplicación a ejecutar (oculta, maximizada...). por defecto es Normal con foco.
- DirectorioPorDefecto : Nombre del directorio por defecto. Si se deja en blanco será el actual directorio por defecto del sistema.
- ControlTimer : Para el modo Asíncrono con aviso es necesario pasarle a la clase un control Timer que se usará para comprobar el estado del proceso cada 100 milisegundos. No usé un Timer mediante API porque no quería añadir la dependencia de un módulo .bas a la clase pero es otra alternativa.
- Ejecutando : Devuelve si el proceso se está ejecutando o no. Es util si no queremos recibir un evento sino preguntar "de vez en cuando" desde nuestro programa si acabó el proceso. Sólo tiene sentido con el modo Asíncrono.
- EsperarCarga : Indica si queremos que nos devuelva el control nada más lanzar el comando o cuando el programa lanzado ha acabado de cargarse. Sólo tiene sentido para los modos Asíncrono y Asíncrono con aviso. Por defecto está a true.
- HuboError : Si su valor es distinto de cero es que no se ha podido ejecutar el comando.
- DescrError : Muestra la descripción del error.
- MostrarReloj :Establece si se debe mostrar el reloj o no durante la carga. Por defecto se toma el comportamiento predeterminado del sistema.
- Prioridad : Establece la prioridad que tendrá el comando a ejecutar. Por defecto el proceso tendrá prioridad Normal.
- hProcess : Devuelve el handle del proceso creado.
- hThread : Devuelve el handle del thread primario del proceso creado.
- dwProcessId : Devuelve el identificador global del proceso creado.
- dwThreadId : Devuelve el identificador global del thread.
- Title : Para procesos de consola, es el título de la ventana si se crea una nueva. Si es null se usará el nombre del ejecutable como título de la ventana. Debe ser null para programas con entorno gráfico o que no creen una nueva consola. Por defecto es null.
- PosX, PosY, UsarPosicion : Posición de la ventana en pixels. No se tienen en cuenta si la propiedad UsarPosicion no está a true (por defecto es false).
- SizeX, SizeY, UsarTamaño : Tamaño de la ventana en pixels. No se tendrán en cuenta si la propiedad UsarTamaño no está a true (por defecto es false).
- CharX, CharY, UsarBuffer : Para procesos de consola, indica el buffer de pantalla horizontal y vertical en caracteres. No se tiene en cuenta si la propiedad UsarBuffer no está a true (por defecto es false).
- ColorFondo, ColorTexto, UsarColores : Establece la suma de colores que se empleará para el fondo de aplicaciones de consola. Por ejemplo, para un fondo blanco estableceremos esta propiedad a Azul + Verde + Rojo. No se tendrá en cuenta si la propiedad UsarColores no está a true (por defecto es false).
- ErrorLevel :Devuelve el "código de retorno" de la aplicación lanzada por la nuestra. Lo que en MS-DOS se denominaba ErrorLevel.
USO DE LA CLASE
Pese a la gran cantidad de propiedades el uso de esta clase es muy sencillo y normalmente sólo necesitaremos unas pocas y en muchos casos sólo la propiedad LineaComando.
Ejemplo:
dim WithEvents Proceso as jrExecCmd
set Proceso = new jrExecCmd
Proceso.LineaComando = "notepad"
'si queremos que nuestro programa espere a que se cierre el notepad
'Proceso.Ejecutar
'si queremos que nuestro programa siga
'Proceso.ModoEjecucion = [jrECmd Asincrono]
'si queremos que siga pero que nos avise cuando se cierre el notepad
'set Proceso.ControlTimer = Timer1
'Proceso.ModoEjecucion = [jrECmd Asincrono con aviso]
jrexeccmd.zip
Trucos
Página de Visual Basic
Página principal
