Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: тαптяα en 12 Agosto 2011, 21:55 PM

Título: Saber si una aplicación no responde
Publicado por: тαптяα en 12 Agosto 2011, 21:55 PM
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.
Título: Re: Saber si una aplicación no responde
Publicado por: raul338 en 12 Agosto 2011, 22:04 PM
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 (http://msdn.microsoft.com/en-us/library/ms644952%28v=vs.85%29.aspx).

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
Título: Re: Saber si una aplicación no responde
Publicado por: тαптяα en 12 Agosto 2011, 22:18 PM
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
Título: Re: Saber si una aplicación no responde
Publicado por: тαптяα en 12 Agosto 2011, 22:21 PM
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
Título: Re: Saber si una aplicación no responde
Publicado por: raul338 en 12 Agosto 2011, 22:28 PM
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 :¬¬