Necesito saber cuando ponen mi formulario en primer plano.
Si cargan mi programa y luego van a la barra de tareas y maximizan otra ventana, quiero saber cuando vuelven a pulsar sobre mi formulario de nuevo, cuando vuelven a activar mi ventana.
He probado con gotfocus y activate, pero esos eventos no se producen. Conoceis el evento?
Un saludo!
Yo he probado los eventos y ninguno hace lo que quieres, lo que se me ocurre es con un timer llamar a la api "GetForegroundWindow" que te da el handle de la ventana activa y lo comparas con el de tu ventana "Me.hWnd" si coincide esta activa.
El evento activate sólo detecta los cambios de ventana dentro de la misma aplicación, para vb 2005 ya está solucionado y detecta tambien los cambios entre diferentes aplicaciones.
Tendré que plantearme usar un timer para poder detectar eso.
Gracias KiZaR
Un Saludo
La propiedad "Resize" te vale para cuando maximizan y minimizan tu ventana, pero si esta visible y pulsas en la barra de tareas no hace nada....
hola puedes hacer un gancho con hook
en un modulo:
Const WM_ACTIVATEAPP = &H1C
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Dim PrevProc As Long
Public Sub HookForm(F As Form)
PrevProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookForm(F As Form)
SetWindowLong F.hwnd, GWL_WNDPROC, PrevProc
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_ACTIVATEAPP Then
If wParam Then
Debug.Print "Activate"
Else
Debug.Print "Deactivate"
End If
End If
End Function
y en el formulario:
Private Sub Form_Load()
HookForm Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookForm Me
End Sub