帮你写了一个,测试通过.以下代码保存到一个标准模块内:Option ExplicitPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal Hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 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 FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Const GWL_WNDPROC = (-4) Private Const WM_GETTEXT = &HD Private Const WM_LBUTTONDBLCLK As Long = &H203 Private Const WMPClass As String = "WMPVideoWindow"Private PrevWndProc As Long Private WMPhWnd As LongPublic Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case MSG Case WM_LBUTTONDBLCLK '吃双击消息 SubWndProc = 1 Exit Function End Select SubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam) '其它消息不管 End FunctionPublic Function SubClassing(ByVal MainhWnd As Long) Dim lRet As Long
lRet = FindWindowEx(MainhWnd, 0, WMPClass, vbNullString) '查找句柄 If lRet <> 0 Then If PrevWndProc = 0 Then WMPhWnd = lRet '挂上子类化过程 PrevWndProc = SetWindowLong(WMPhWnd, GWL_WNDPROC, AddressOf SubWndProc) End If End If Debug.Print lRet End FunctionPublic Function UnSubClass() If PrevWndProc <> 0 Then SetWindowLong WMPhWnd, GWL_WNDPROC, PrevWndProc End Function使用:在视频开始播放时,调用:Call SubClassing(Me.Hwnd)参数是WMP播放器所在的窗口句柄一定要在播放时再调用,因为那时才能找到"WMPVideoWindow"类.这个窗口销毁时,需要卸载子类化:Call UnSubClass
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 FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Const GWL_WNDPROC = (-4)
Private Const WM_GETTEXT = &HD
Private Const WM_LBUTTONDBLCLK As Long = &H203
Private Const WMPClass As String = "WMPVideoWindow"Private PrevWndProc As Long
Private WMPhWnd As LongPublic Function SubWndProc(ByVal Hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case MSG
Case WM_LBUTTONDBLCLK '吃双击消息
SubWndProc = 1
Exit Function
End Select
SubWndProc = CallWindowProc(PrevWndProc, Hwnd, MSG, wParam, lParam) '其它消息不管
End FunctionPublic Function SubClassing(ByVal MainhWnd As Long)
Dim lRet As Long
lRet = FindWindowEx(MainhWnd, 0, WMPClass, vbNullString) '查找句柄
If lRet <> 0 Then
If PrevWndProc = 0 Then
WMPhWnd = lRet '挂上子类化过程
PrevWndProc = SetWindowLong(WMPhWnd, GWL_WNDPROC, AddressOf SubWndProc)
End If
End If
Debug.Print lRet
End FunctionPublic Function UnSubClass()
If PrevWndProc <> 0 Then SetWindowLong WMPhWnd, GWL_WNDPROC, PrevWndProc
End Function使用:在视频开始播放时,调用:Call SubClassing(Me.Hwnd)参数是WMP播放器所在的窗口句柄一定要在播放时再调用,因为那时才能找到"WMPVideoWindow"类.这个窗口销毁时,需要卸载子类化:Call UnSubClass