Página 1 de 1

Evento para ventana desactivada

Publicado: 22 Oct 2009, 14:13
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

Re: Evento para ventana desactivada

Publicado: 22 Oct 2009, 15:53
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.

Re: Evento para ventana desactivada

Publicado: 23 Oct 2009, 10:55
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