mciSendString确定是很不好用,可以推荐一个好用的点叫ActiveMovie(至少对VB来说它更方便,功能也更强),可以完全取代mci(mci内部也是调用ActiveMovie实现的)。
在VB6IDE的菜单栏中找到“工程→引用”菜单,然后勾上“ActiveMovie control type library”,然后写入以下代码:
Option ExplicitConst WS_CHILD = &H40000000' 定义变量保存播放器实例
Dim mc As FilgraphManager
Dim mp As IMediaPosition
Dim ba As IBasicAudio
Dim bv As IBasicVideo
Dim vw As IVideoWindowPrivate Sub Form_Load()
' 创建 ActiveMovie 播放器
Set mc = New FilgraphManager
Set mp = mc ' 进度控制接口(可以获取视频总长度,播放进度等信息,单位为秒,可用小数表示精确进度)。
Set ba = mc ' 声音控制接口(其中的音量是以百分之一分贝为单位,即0表示原声,-100表示音量降低1分贝,最小值为-10000(降100分贝也就静音了))
Set bv = mc ' 视频控制接口
Set vw = mc ' 视频窗口控制接口
' 加载视频文件
mc.RenderFile "D:\Videos\LoginVideo.wmv"
' 设置播放器的父窗口
vw.Owner = Me.hWnd
' 设置播放器子窗口的样式(如果不指定WS_CHILD样式的话,播放器是浮在我们Form上方,而不是嵌入到里面)
vw.WindowStyle = WS_CHILD
End SubPrivate Sub Form_Resize()
' 窗口大小改变时拉伸播放器子窗口
vw.SetWindowPosition Me.ScaleX(Me.ScaleLeft, Me.ScaleMode, vbPixels), Me.ScaleY(Me.ScaleTop, Me.ScaleMode, vbPixels), Me.ScaleX(Me.ScaleWidth, Me.ScaleMode, vbPixels), Me.ScaleY(Me.ScaleHeight, Me.ScaleMode, vbPixels)
End SubPrivate Sub Form_Unload(Cancel As Integer)
' 停止播放
mc.Stop
End SubPrivate Sub Command1_Click()
' 开始播放
mc.Run
End SubPrivate Sub Timer1_Timer()
' 显示播放进度
Me.Caption = mp.CurrentPosition & "/" & mp.Duration
End Sub