'in a moudle
Option ExplicitPublic 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End TypePublic prevWndProc As LongPublic Const WM_ACTIVATE = &H6Public Const GWL_WNDPROC = (-4)Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
    If Msg = WM_ACTIVATE Then
        If wParam = 0 Then
            Form1.Caption = "失去焦点"
        Else
            Form1.Caption = "得到焦点"
        End If
    End If
End Function'in a form
Option Explicit
Private Sub Form_Load()
    prevWndProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)     '获得原消息处理句柄,并将消息处理转交自定义函数
End SubPrivate Sub Form_Unload(Cancel As Integer)
    SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub