Visual Basic - Shell cerrar aplicaciones

Life is soft - evento anual de software empresarial
 
Vista:

Shell cerrar aplicaciones

Publicado por jose (69 intervenciones) el 03/06/2005 21:23:29
Buenos dias tengo una duda que le llevo dando vueltas ya varios dias, a ver si alguien me puede hechar una mano.

Uso la instrucion shell para abrir una aplicacion de windows a la que le paso unos parametros, la aplicacion hace su funcion, y cuando termina presenta una pantalla del estado de los procesos que ha realizado.

Mi problema parte de esta pantalla del estado de los procesos realizados, ya que no tiene un modo de cerrarla a no ser con el raton, tambien he realizado pruebas para cerrarla con sendkeys pero le tengo que poner un retardo para que antes de cerrarme la aplicacion de tiempo a ejecutar los procesos que debe de realizar, y siempre no tardara lo mismo dependiendo del trabjo que le envie la esta aplicacion.

Como yo tengo que llamar a la aplicacion repetidas veces para realizar diferentes procesos en diferentes momentos, tengo el problema de que tengo otra sesion abierta del mismo programa y entonces la instuccion shell me da error ya que ya esiste otra sesion del mismo programa en ejecucion.

Espero se entienda mi problema y que alguien me pueda dar una ayuda al respecto.

Gracias de antemano.

Jose
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:Shell cerrar aplicaciones

Publicado por Daniel (63 intervenciones) el 03/06/2005 21:30:17
Si la aplicacion es tuya la podes cambiar para que se cierre cuando termina de realizar lo que le pedis pero de lo contrario deberias preguntarle a alguien que entiende algo de dll porque podes cerrarla con una de esas
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:Shell cerrar aplicaciones

Publicado por jose (69 intervenciones) el 03/06/2005 21:45:16
la aplicacion no es mia, es propietaria, y no me la modificarian, alguna otra opcion

gracias
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:Shell cerrar aplicaciones

Publicado por SetFocus (183 intervenciones) el 04/06/2005 01:31:55
Hola! Lo que podes hacer es implementar la API PostMessage y enviale a la ventana que queres cerrar la orden de cerrarce... bueno va a quedar mas claro en un ejemplo...
Para probar el ejemplo en un form agrega 2 CommanButton y luego pega en la seccion general del form el codigo siguiente:

Private Declare Function WaitForSingleObject Lib "kernel32" _
(ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long

Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function PostMessage Lib "user32" _
Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Private Declare Function IsWindow Lib "user32" _
(ByVal hwnd As Long) As Long

Private Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, _
ByVal bInheritHandle As Long, _
ByVal dwProcessId As Long) As Long

Private Declare Function GetWindowThreadProcessId Lib "user32" _
(ByVal hwnd As Long, _
lpdwProcessId As Long) As Long

'Constantes usadas por la API
Const WM_CLOSE = &H10
Const INFINITE = &HFFFFFFFF
Const SYNCHRONIZE = &H100000

Private Sub Form_Load()
Command1.Caption = "Ejecutar Calculadora"
Command2.Caption = "Cerrar Calculadora"
End Sub

Private Sub Command1_Click()
'Abrir la Calduladora de Windows
Shell "calc.exe", vbNormalNoFocus
End Sub

Private Sub Command2_Click()
'Cerrar la ventana de la Calculadora
Dim hWindow As Long
Dim hThread As Long
Dim hProcess As Long
Dim lProcessId As Long
Dim lngResult As Long
Dim lngReturnValue As Long

hWindow = FindWindow(vbNullString, "Calculadora")
hThread = GetWindowThreadProcessId(hWindow, lProcessId)
hProcess = OpenProcess(SYNCHRONIZE, 0&, lProcessId)
lngReturnValue = PostMessage(hWindow, WM_CLOSE, 0&, 0&)
lngResult = WaitForSingleObject(hProcess, INFINITE)

End Sub

Bueno, lo que hace el codigo, primero es ubicar la ventana por su nombre: hWindow = FindWindow(vbNullString, "Calculadora") en tu caso reemplaza "Calculadora" por el nombre de la ventana que parece en la barra de titulo de la ventana que queres cerrar.
Segundo la cierra :
lngReturnValue = PostMessage(hWindow, WM_CLOSE, 0&, 0&)

Espero que te sirva.Saludos

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:Shell cerrar aplicaciones

Publicado por jose (69 intervenciones) el 04/06/2005 13:52:07
Lo pruebo y te comento.

Muchas gracias por tu colaboracion
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:Shell cerrar aplicaciones

Publicado por jose (69 intervenciones) el 05/06/2005 15:31:21
gracias el codigo que me has indicado me sirve,

Otra consulta si es posible;

¿Se puede obtener un listado de las ventanas que esten en ejecucion por este metodo que me indicas?

¿si es asi me puedes indicar un ejemplo, ya que no acabo de entender las instrucciones?
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