给你罗列了一点窗口消息,你自己看看吧: ======================= '''form代码: Private Sub Form_Load() prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC) SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc End SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc End Sub'''新建一个模块,代码: Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) 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 Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const GWL_WNDPROC = (-4) Public Const SC_MAXIMIZE = &HF030& Public Const SC_MINIMIZE = &HF020& Public Const SC_SIZE = &HF000 Public Const SC_CLOSE = &HF060 Public Const WM_SYSCOMMAND = &H112 Public Const SC_DEFAULT = &HF160 Public Const WM_NCLBUTTONDBLCLK = &HA3 Public Const SC_RESTORE = &HF120&Public prevWndProc As Long ''''默认窗口程序地址Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long On Error GoTo ShowErr If Msg = WM_SYSCOMMAND Then If wParam = SC_RESTORE Then MsgBox "窗体恢复原状!" 'Exit Function '''这里如果被使用了,则移除相关操作,可以尝试使其有效 ElseIf wParam = SC_MAXIMIZE Then MsgBox "窗体最大化!" 'Exit Function ElseIf wParam = SC_MINIMIZE Then MsgBox "窗体最小化!" 'Exit Function Else WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) End If ElseIf Msg = WM_NCLBUTTONDBLCLK Then MsgBox "你双击了标题栏!" 'Exit Function End If
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) Exit Function ShowErr: WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam) Exit Function End Function
=======================
'''form代码:
Private Sub Form_Load()
prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
End SubPrivate Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
End Sub'''新建一个模块,代码:
Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) 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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const GWL_WNDPROC = (-4)
Public Const SC_MAXIMIZE = &HF030&
Public Const SC_MINIMIZE = &HF020&
Public Const SC_SIZE = &HF000
Public Const SC_CLOSE = &HF060
Public Const WM_SYSCOMMAND = &H112
Public Const SC_DEFAULT = &HF160
Public Const WM_NCLBUTTONDBLCLK = &HA3
Public Const SC_RESTORE = &HF120&Public prevWndProc As Long ''''默认窗口程序地址Public Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo ShowErr If Msg = WM_SYSCOMMAND Then
If wParam = SC_RESTORE Then
MsgBox "窗体恢复原状!"
'Exit Function '''这里如果被使用了,则移除相关操作,可以尝试使其有效
ElseIf wParam = SC_MAXIMIZE Then
MsgBox "窗体最大化!"
'Exit Function
ElseIf wParam = SC_MINIMIZE Then
MsgBox "窗体最小化!"
'Exit Function
Else
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
End If
ElseIf Msg = WM_NCLBUTTONDBLCLK Then
MsgBox "你双击了标题栏!"
'Exit Function
End If
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
Exit Function
ShowErr:
WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
Exit Function
End Function