Visual Basic - LostFocus

Life is soft - evento anual de software empresarial
   
Vista:

LostFocus

Publicado por Crisan (27 intervenciones) el 25/10/2008 22:30:04
¿Se puede detectar cuando mi proyecto recupera el foco después de haberlo perdido al abrir cualquier otra aplicación desde la barra de menú de Windows (explorador, paint..). Es decir, tengo mi trabajo abierto y el explorador y desde la barra de menú de Windows abro una y otra aplicación. Los eventos LostFocus - GotFocus no funciona en este caso. Si alguien puede ayudarme se lo agradezco, ya que llevo tiempo buscando información en los manuales y el MSDN, pero no doy con ello.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:LostFocus

Publicado por igor (633 intervenciones) el 26/10/2008 20:24:48
Prueba con GetForegroundWindow() comparandolo conMe.hWnd.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:LostFocus

Publicado por Crisan (27 intervenciones) el 26/10/2008 20:47:23
Efectivamente Igor. Encontré un código que funciona perfectamente.

Gracias por la ayuda.
Aquí os dejo el código por si le ayuda a alguien.

Option Explicit
'Constantes
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40

' funciones Api
Private Declare Sub SetWindowPos Lib "User32" ( _
ByVal hWnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal Y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long)

'Función que recupera el texto de la ventana
Private Declare Function GetWindowText Lib "User32" Alias "GetWindowTextA" _
(ByVal hWnd As Long, _
ByVal lpString As String, _
ByVal cch As Long) As Long

' Recupera el Hwnd de la ventana
Private Declare Function GetForegroundWindow Lib "User32" () As Long

'---------------------

Private Sub Timer4_Timer()
Dim hwnd_Ventana As Long
Dim Caption_Ventana As String
Dim length As Long

' Captura el Hwnd de la ventana activa
hwnd_Ventana = GetForegroundWindow()

'Crea un Buffer para el caption del title bar
Caption_Ventana = Space$(1024)

' Retorna la cantidad de caracteres
length = GetWindowText(hwnd_Ventana, Caption_Ventana, Len(Caption_Ventana))

' Obtiene solo el caption sin los espacios nulos de la cadena
Caption_Ventana = Left$(Caption_Ventana, length)
Me.Cls
'Imprime el caption de la ventana que tiene el foco en el _
formulario y el HWND
Me.Print "HWND: -> " & CStr(hwnd_Ventana)
Me.Print "Título: -> " & Caption_Ventana

End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar