............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Cerrar Aplicaciones

Ver el tema anterior Ver el tema siguiente Ir abajo

Cerrar Aplicaciones

Mensaje por GalileoGali el Miér Ene 14, 2009 6:41 am

Bien, deciamos entonces, que gracias a Shellexecute podemos obtener un efecto similar al de dar Doble click sobre un acceso directo, o un hipervinculo, un icono de carpeta o de archivo. Entonces, ahora nos proponemos "cerrar" una aplicacion teniendo en cuenta uno de estos dos casos:
1) La aplicacion fue abierta mediante ShellExecute
2) La Aplicacion habia sido abierta con Shell
ó
3) La Aplicacion no fue abierta con nuestro programa y tenemos por ejemplo la parte comun del Caption, que muestra esa aplicacion en todas sus ventanas u otra manera que ahora no se me ocurre para identificar la Aplicacion a "cerrar"

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Cerrar Aplicaciones

Mensaje por P@li el Jue Ene 15, 2009 1:41 pm

Hola Gali,
Voy a alterar el orden, creo que uno de los más difíciles era cerrar una aplicación que fue abierta por la función Shell, a continuación dejo la solución.

Hay que colocar todo en un módulo, y usar el procedimiento prueba para ver como funciona (ir con F8).
Lo que va a hacer es abrir la calculadora de Windows, y después de transcurridos 5 segundos va a cerrarla.
Código:

Option Explicit
Private Const WM_SYSCOMMAND = &H112
Private Const SC_CLOSE = &HF060&
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Const GW_HWNDFIRST = 0
Private Const GW_HWNDNEXT = 2
Private Declare Function GetActiveWindow Lib "user32" () As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As Long) As Long


Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Const SW_SHOWNORMAL = 1

Sub prueba()
    Dim lInst As Long
    Dim hwnd As Long
       
    hwnd = get_hWnd(Shell("CALC.EXE", vbMinimizedNoFocus))
   
    Dim t As Long
    t = Timer + 5
    Do While t > Timer
        DoEvents
    Loop
   
    SendMessage hwnd, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&

End Sub

Function get_hWnd(ByVal Inst As Long) As Long
    Dim hwnd As Long
    Dim tempInst As Long
    Dim res As Long

    get_hWnd = -1
    hwnd = GetWindow(GetActiveWindow, GW_HWNDFIRST)
    Do
        If GetParent(hwnd) = 0 And IsWindowVisible(hwnd) = 1 Then
            tempInst = 0
            res = GetWindowThreadProcessId(hwnd, tempInst)
            If Inst = tempInst Then
                get_hWnd = hwnd
            End If
        End If
        hwnd = GetWindow(hwnd, GW_HWNDNEXT)
        If hwnd = 0 Then Exit Do
    Loop
End Function


En otra oportunidad voy a dejar ejemplos para los demás casos.

Saludos,

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 33
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Cerrar Aplicaciones

Mensaje por GalileoGali el Jue Ene 15, 2009 10:11 pm

Por si acaso a alguien le pasa lo que a mí: con el comando Buscar, ubicar en la PC, el archivo CALC.exe, para adecuar el Path de Get_Hwnd(Shell(
En mi caso por ejemplo, corresponde
esta sentencia
hwnd = get_hWnd(Shell("C:\WINDOWS\system32\dllcache\CALC.EXE", vbMinimizedNoFocus))

Sigo analizando el codigo......

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1962
Edad : 61
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Cerrar Aplicaciones

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.