Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_USER = &H400
Public Const GWL_WNDPROC = (-4)
Private OldWndProc As Long
Public Const VK_UP = &H101
Public Const VK_DOWN = &H100
Private Const VK_LEFT = &H25
Public Const EN_CHANGE = &H300
Private Const ENM_CHANGE = &H1
Private Const ENM_SELCHANGE = &H80000
Public Function WindowProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
' Debug.Print Msg, wParam, lParam
Select Case wParam
Case EN_CHANGE
Debug.Print "EN_CHANGE"
Case VK_LEFT
Debug.Print "VK_LEFT"
Case Else
' If Msg = WM_MYMESSAGE Then
' Debug.Print "自定义消息!"
' Exit Function
' End If
WindowProc = CallWindowProc(OldWndProc, hWnd, Msg, wParam, lParam)
End Select
End Function
Public Sub HookWindow(hWnd As Long)
OldWndProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHook(hWnd As Long)
SetWindowLong hWnd, GWL_WNDPROC, OldWndProc
End Sub
------------------------
Option Explicit
Private Sub Form_load()
Call HookWindow(Text1.hWnd)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call UnHook(Text1.hWnd)
End Sub