在Windows下编程,少不了和各种消息打交道.那么,如何得到各种消息的值呢
使用API浏览器是一个好办法,但是API浏览器没有收录进所有的消息值.
以下办法将可以得到所有的消息值
以下代码在模块中
Option Explicit
Private 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
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_WNDPROC = (-4)
Dim PrevProc As Long
Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Debug.Print "msg=" & uMsg
WindowProc = CallWindowProc(PrevProc, hWnd, uMsg, wParam, lParam)
End Function
Public Sub HookForm(ByVal hWnd As Long)
PrevProc = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnHookForm(ByVal hWnd As Long)
SetWindowLong hWnd, GWL_WNDPROC, PrevProc
End Sub
以下代码在窗体中
Option Explicit
Private Sub Form_Load()
HookForm Me.hWnd
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHookForm Me.hWnd
End Sub