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.
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í
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í
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
Yo intentaría asi
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 :¬¬