用HOOK处理。 窗体代码: Option ExplicitPrivate Sub Form_Load() Call SetHOOK(RichTextBox1.hWnd) End SubPrivate Sub Form_Unload(Cancel As Integer) Call UnHOOK End Sub标准模块代码: Option ExplicitPrivate Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongW" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcW" ( _ ByVal lppreWinProc As Long, _ ByVal hWnd As Long, ByVal Msg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long Private mOldHWND As Long Private mOldProc As Long Private mHookFlag As LongPublic Sub SetHOOK(ByVal hWnd As Long) If (hWnd = 0&) Then Exit Sub If (mOldProc) Then Call UnHOOK mOldHWND = hWnd mOldProc = SetWindowLong(hWnd, -4&, AddressOf MyWinProc) End SubPublic Sub UnHOOK() If (mOldProc = 0&) Then Exit Sub Call SetWindowLong(mOldHWND, -4&, mOldProc) mOldProc = 0& End SubPrivate Function MyWinProc(ByVal hWnd As Long, ByVal uMsg As Long, _ ByVal wParam As Long, ByVal lParam As Long) As Long If (uMsg = &H20A&) Then wParam = wParam And &HFFFFFFF3 MyWinProc = CallWindowProc(mOldProc, hWnd, uMsg, wParam, lParam) End Function
窗体代码:
Option ExplicitPrivate Sub Form_Load()
Call SetHOOK(RichTextBox1.hWnd)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call UnHOOK
End Sub标准模块代码:
Option ExplicitPrivate Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongW" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "User32" Alias "CallWindowProcW" ( _
ByVal lppreWinProc As Long, _
ByVal hWnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private mOldHWND As Long
Private mOldProc As Long
Private mHookFlag As LongPublic Sub SetHOOK(ByVal hWnd As Long)
If (hWnd = 0&) Then Exit Sub
If (mOldProc) Then Call UnHOOK
mOldHWND = hWnd
mOldProc = SetWindowLong(hWnd, -4&, AddressOf MyWinProc)
End SubPublic Sub UnHOOK()
If (mOldProc = 0&) Then Exit Sub
Call SetWindowLong(mOldHWND, -4&, mOldProc)
mOldProc = 0&
End SubPrivate Function MyWinProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If (uMsg = &H20A&) Then wParam = wParam And &HFFFFFFF3
MyWinProc = CallWindowProc(mOldProc, hWnd, uMsg, wParam, lParam)
End Function