Foro de elhacker.net

Programación => 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

Citar
Nota: 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
  1. Private Declare Function SendMessageTimeout lib "USER32" Alias "SendMessageTimeoutA" _
  2.        (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
  3.         lParam As Any, ByVal fuFlags As Long, ByVal uTimeout As Long, _
  4.         ByVal lpdwResult As Long) As Long
  5.  
  6. ' Constantes para fuFlags
  7. Private Const SMTO_ABORTIFHUNG As Long = &H2 ' No espera a que se termine el TimeOut
  8. Private Const SMTO_BLOCK As Long = &H1 ' Previene que tu aplicacion procese mensajes mientras se espera
  9. Private Const SMTO_NORMAL As Long = &H0 ' No previene que tu aplicacion procese mensajes mientras se espera
  10. Private Const SMTO_NOTIMEOUTIFNOTHUNG As Long = &H8 ' Si el proceso destino procesa mensajes no espera a el TimeOut
  11. Private Const SMTO_ERRORONEXIT As Long = &H20 ' Devuelve 0 si el proceso de destino finaliza o la ventana es destruido
  12.  


Título: Re: Saber si una aplicación no responde
Publicado por: тαптяα en 12 Agosto 2011, 22:18 pm
Abajo hay una nota que dice claramente

Que se usaría algo así

Código
  1. Private Declare Function SendMessageTimeout lib "USER32" Alias "SendMessageTimeoutA" _
  2.        (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
  3.         lParam As Any, ByVal fuFlags As Long, ByVal uTimeout As Long, _
  4.         ByVal lpdwResult As Long) As Long
  5.  
  6. ' Constantes para fuFlags
  7. Private Const SMTO_ABORTIFHUNG As Long = &H2 ' No espera a que se termine el TimeOut
  8. Private Const SMTO_BLOCK As Long = &H1 ' Previene que tu aplicacion procese mensajes mientras se espera
  9. Private Const SMTO_NORMAL As Long = &H0 ' No previene que tu aplicacion procese mensajes mientras se espera
  10. Private Const SMTO_NOTIMEOUTIFNOTHUNG As Long = &H8 ' Si el proceso destino procesa mensajes no espera a el TimeOut
  11. Private Const SMTO_ERRORONEXIT As Long = &H20 ' Devuelve 0 si el proceso de destino finaliza o la ventana es destruido
  12.  
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
  1. Private Declare Function SendMessageTimeout lib "USER32" Alias "SendMessageTimeoutA" _
  2.        (ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, _
  3.         lParam As Any, ByVal fuFlags As Long, ByVal uTimeout As Long, _
  4.         ByVal lpdwResult As Long) As Long
  5. Private Const SMTO_BLOCK As Long = &H1 ' Previene que tu aplicacion procese mensajes mientras se espera
  6. Private Const SMTO_ERRORONEXIT As Long = &H20 ' Devuelve 0 si el proceso de destino finaliza o la ventana es destruido
  7. Private Const WM_GETTEXT As Long = &HD
  8.  
  9. Function IsAlive(ByVal hwnd as Long, Optional ByVal TimeOut as Long = 4500) as Boolean
  10.    IsAlive = SendMessageTimeout(hwnd, WM_GETTEXT, 0, 0, SMTO_BLOCK Or SMTO_ERRORONEXIT, TimeOut)
  11. End Function
  12.  

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