Evento para ventana desactivada

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Evento para ventana desactivada

Mensaje por Ximorro »

Buenas foreros, quería saber si hay alguna manera de controlar la pérdida de foco (desactivación) de la ventana de un GUI de autoIt. Es decir, no es que un control pierda el foco, sino que la ventana no esté activa.

Tengo un tooltip mostrado con la ventana y si pierde foco (se minimiza, se activa otra que se pone delante, etc) pues quiero quitar el tooltip.

Una manera supongo que es estar mirando constantemente WinActive($miGUI), pero preferiría no estar haciendo eso todo el rato. Mi pregunta es si hay alguna manera de manejarlo en plan evento, para que sólo me notifique cuando pase eso.
Sí que tengo $GUI_EVENT_MINIMIZE, pero no es suficiente porque por ejemplo si cambio a otra ventana pinchando sobre ella o cambiando con ALT+TAB (y quizás de otras maneras) también tengo que actuar, y para eso GUIGetMsg no devuelve nada...

¿Quizás algún mensaje de Windows que pueda registrar con GUIRegisterMsg para que me avise de esto?

Graciasss
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Avatar de Usuario
Chefito
Profesional del Autoit
Mensajes: 2035
Registrado: 21 Feb 2008, 18:42
Ubicación: Albacete/Cuenca (España)

Re: Evento para ventana desactivada

Mensaje por Chefito »

Aquí te dejo un ejemplo con los mensajes que envia el win cuando la ventana pierde y gana el foco.

Código: Seleccionar todo

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

GUIRegisterMsg($WM_KILLFOCUS, "WM_KILLFOCUS")

GUIRegisterMsg($WM_SETFOCUS, "WM_SETFOCUS")

Local $msg



GUICreate("My GUI") ; will create a dialog box that when displayed is centered

GUISetState(@SW_SHOW) ; will display an empty dialog box



; Run the GUI until the dialog is closed

While 1

    $msg = GUIGetMsg()



    If $msg = $GUI_EVENT_CLOSE Then ExitLoop

WEnd

GUIDelete()

Func WM_KILLFOCUS($hWnd, $iMsg, $iwParam, $ilParam)

    TrayTip("Perdida","LA VENTANA HA PERDIDO EL FOCO",0,1)

EndFunc

Func WM_SETFOCUS($hWnd, $iMsg, $iwParam, $ilParam)

    TrayTip("Ganancia","LA VENTANA HA GANADO EL FOCO",0,1)

EndFunc

 
Saludos.
Cita vista en algún lugar de la red: En este mundo hay 10 tipos de personas, los que saben binario y los que no ;).
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: Evento para ventana desactivada

Mensaje por Ximorro »

¡Justo, justo, justo! Muchas gracias, es justo lo que estaba buscando.

Encontré el mensaje WM_ACTIVATE, y por ahí se puede hacer, pero hay que estar investigando los parámetros para ver si se ha activado o desactivado. Es más general y hace más cosas pero ahora sólo necesito WM_KILLFOCUS, así que con eso voy al grano.

Gracias
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder