也就是双击播放窗口没有任何效果。

解决方案 »

  1.   

    帮你写了一个,测试通过.以下代码保存到一个标准模块内: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
      

  2.   

    参数是WMP播放器所在的窗口句柄,这句话是什么意思。FindWindowEx返回0了,我的WMP播放器是放在form1上的,那这个参数是写form1的句柄吗?