Saber si una aplicación no responde

Iniciado por тαптяα, 12 Agosto 2011, 21:55 PM

0 Miembros y 1 Visitante están viendo este tema.

тαптяα

Tengo una pequeña duda, quiero saber si mi aplicación No responde y ejecutar una función.

Se puede conseguir sin hacer falta esto: http://www.recursosvisualbasic.com.ar/htm/listado-api/235-ver-si-aplicacion-responde.htm

Gracias.

raul338

Abajo hay una nota que dice claramente

CitarNota: Para ver el estado del programa para ver si este responde o no, se usa la función del api SendMessageTimeout.

Que se usaría algo así

Código (vb) [Seleccionar]

Private Declare Function SendMessageTimeout lib "USER32" Alias "SendMessageTimeoutA" _
        (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
         lParam As Any, ByVal fuFlags As Long, ByVal uTimeout As Long, _
         ByVal lpdwResult As Long) As Long

' Constantes para fuFlags
Private Const SMTO_ABORTIFHUNG As Long = &H2 ' No espera a que se termine el TimeOut
Private Const SMTO_BLOCK As Long = &H1 ' Previene que tu aplicacion procese mensajes mientras se espera
Private Const SMTO_NORMAL As Long = &H0 ' No previene que tu aplicacion procese mensajes mientras se espera
Private Const SMTO_NOTIMEOUTIFNOTHUNG As Long = &H8 ' Si el proceso destino procesa mensajes no espera a el TimeOut
Private Const SMTO_ERRORONEXIT As Long = &H20 ' Devuelve 0 si el proceso de destino finaliza o la ventana es destruido

тαптяα

Cita de: raul338 en 12 Agosto 2011, 22:04 PM
Abajo hay una nota que dice claramente

Que se usaría algo así

Código (vb) [Seleccionar]

Private Declare Function SendMessageTimeout lib "USER32" Alias "SendMessageTimeoutA" _
        (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
         lParam As Any, ByVal fuFlags As Long, ByVal uTimeout As Long, _
         ByVal lpdwResult As Long) As Long

' Constantes para fuFlags
Private Const SMTO_ABORTIFHUNG As Long = &H2 ' No espera a que se termine el TimeOut
Private Const SMTO_BLOCK As Long = &H1 ' Previene que tu aplicacion procese mensajes mientras se espera
Private Const SMTO_NORMAL As Long = &H0 ' No previene que tu aplicacion procese mensajes mientras se espera
Private Const SMTO_NOTIMEOUTIFNOTHUNG As Long = &H8 ' Si el proceso destino procesa mensajes no espera a el TimeOut
Private Const SMTO_ERRORONEXIT As Long = &H20 ' Devuelve 0 si el proceso de destino finaliza o la ventana es destruido

Muchas gracias, pues me habia casi rendido ya.

Aunque no sé si podre aplicarlo esto a mi programa. Si tengo dudas respondere en este mensaje.

Saludos

тαптяα

Vale, la información que he leido de MSDN sobre esta función me ha confundido aún más. Como podría saber con SendMessageTimeout si mi aplicación no responde.

Gracias de nuevo

raul338

Yo intentaría asi

Código (vb) [Seleccionar]

Private Declare Function SendMessageTimeout lib "USER32" Alias "SendMessageTimeoutA" _
        (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
         lParam As Any, ByVal fuFlags As Long, ByVal uTimeout As Long, _
         ByVal lpdwResult As Long) As Long
Private Const SMTO_BLOCK As Long = &H1 ' Previene que tu aplicacion procese mensajes mientras se espera
Private Const SMTO_ERRORONEXIT As Long = &H20 ' Devuelve 0 si el proceso de destino finaliza o la ventana es destruido
Private Const WM_GETTEXT As Long = &HD

Function IsAlive(ByVal hwnd as Long, Optional ByVal TimeOut as Long = 4500) as Boolean
    IsAlive = SendMessageTimeout(hwnd, WM_GETTEXT, 0, 0, SMTO_BLOCK Or SMTO_ERRORONEXIT, TimeOut)
End Function


Aunque no lo he probado ni yo :xD por apurado :¬¬