Visual Basic - Aplicacion terminada...

Life is soft - evento anual de software empresarial
 
Vista:

Aplicacion terminada...

Publicado por Hernan (32 intervenciones) el 04/11/2006 18:23:07
Hola foro!
Estoy llamando un programa con el shell ( resp=shell ("miaplicacion.exe")) y tengo en "resp" el ID de esa aplicacion... pero como hago para que visual haga algo cuando el usuario cierre esa aplicacion? es decir, como me doy cuenta que se cerró el programa que abrí?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Aplicacion terminada...

Publicado por Paco (1 intervención) el 04/11/2006 19:24:25
Primeramente un saludo. Seguramente que cuando ejecutas esa aplicación se inicia un proceso en el administrador de tareas de windows, puedes comprobar desde visual basic si el proceso existe o no, con lo que sabrás si has cerrado el programa o no. Soy novato en vb y no puedo ofrecerte ningún código de ejemplo pero seguro que por Internet encuentras algo. Espero que esto sirva para orientarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aplicacion terminada...

Publicado por albertovicat (200 intervenciones) el 04/11/2006 21:03:29
Es algo así:
Primero va esto en la seccione declaraciones de un módulo:

Public Activa As Long
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 Declare Function TerminateProcess Lib "kernel32" (ByVal tProcess As Long, ByVal uExitCode As Long) As Long
-------------------------------------------------------------------------------------------------
Después te hacés una Sub, que para mi yo le puse "EJECUTAR":

Public Sub EJECUTAR(Programa As String)
hProceso = OpenProcess(PROCESS_QUERY_INFORMATION, 0, Shell(Programa, 6))
Do
ret = GetExitCodeProcess(hProceso, Activa)
DoEvents
Loop While Activa = STILL_ACTIVE
End Sub

...y le pasás como parámetro el nombre del prog. que querés ejecutar. El loop Do-Loop While se sigue ejecutando mientras el proceso lanzado (tu programa) continúa ejecutándose. Es importante incluir dentro de este loop a "DoEvents", que permite que cualquier otro programa en la PC pueda ejecutarse mientras dura el loop, de lo contrario tu PC parecerá colgada hasta que el loop termine.

...espero no haberle sacado algo esencial, pues esta Sub es mucho más larga en mi programa.
Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aplicacion terminada...

Publicado por Hernan (32 intervenciones) el 04/11/2006 21:36:06
Gracias alberto, si sirvió... pero hay un problema, que cuando se ejecuta la aplicacion externa se inicia como minimizada.. eso tiene solucion?... disculpa si molesto mucho...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aplicacion terminada...

Publicado por albertovicat (200 intervenciones) el 05/11/2006 02:52:46
Si Hernán, la tiene. Es el segundo parámetro de Shell, el que figura como "6".
Ahí te paso lo que dicen las MSDN sobre ese parámetro de Shell:

Constante Valor Descripción
vbHide 0 Se oculta Windows y se pasa el foco a la ventana oculta.
vbNormalFocus 1 Windows recupera el foco y vuelve a su posición y tamaño original.
vbMinimizedFocus 2 Windows se muestra como un icono con foco.
vbMaximizedFocus 3 Windows se maximiza con foco.
vbNormalNoFocus 4 Windows vuelve al tamaño y posición más recientes. La ventana activa actual permanece activa.
vbMinimizedNoFocus 6 Windows se muestra como un icono. La ventana activa actual permanece activa.

acá sale amontonado, parece que el editor de texto este de las respuestas no mantiene las tabulaciones, pero se entiende.
Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aplicacion terminada...

Publicado por albertovicat (200 intervenciones) el 05/11/2006 02:58:34
O sea: en mi caso usé el 6 (vbMinimixedNoFocus) porque quería justamente que se ejecutara minimizada, puesto que el programa es un "Front End" para comprimir wavs a mp3s desde una lista seleccionada por el usuario, utilizando para ello a Lame.exe, un compresor a mp3 para DOS, sin interface gráfica. Vos tenés que usar el número que desées según como quieras que lo haga tu programa.
Contame como te fue.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Aplicacion terminada...

Publicado por her (32 intervenciones) el 06/11/2006 02:31:56
Le pobre con todas y nada... debe ser el tipo de aplicacion que estoy usando, es un programa de un escaner... si lo unico que se esta ejecutando es el programa me sirve con la opcion "0", pero si hay alguna otra ventana abierta no se me ve... gracias alberto
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar