Windows Media Player 是微软推出的最新数字媒体播放器它除了继承了media player 的优秀之处外还添加了许多的实用功能不过这些功能并不是本文讲述的重点本文要讲的是如何利用media player来编写一个自己的嵌入式软件并让它拥有播放cdvcdavimp等的功能
要编写这个程序你首先要熟悉因为本程序是使用编写在你的计算机上要安装windows media player 最后最关键的是要安装windows mendia player sdk在sdk中包含了一个dll这个dll的作用是完成之间的转换因为media player 的编程要使用一个media player activeX控件而activeX的本质就是一个com对于windows mendia player sdk可以到微软的msdn去下载
完成上面个软件的安装后还不可以动手编写代码因为要保证mendia player 要框架通信还必须注册mendia player 的pia所谓pia是Primary interop assemblies的缩写本人将它翻译为原始内部汇编集之所以要先注册它是因为com技术诞生技术之前要让通信就要一个中间层来连接这两边在mendia player 中使用mendia player sdk redist目录下的wmppiadll来注册mendia player 的pia在命令窗口中输入[path]regasm c:\WMSDK\WMPSDK\ redist\wmppiadll(提供的pia注册程序path是它的路径你可以用搜索功能来找到它)
各位别以为注册了pia就可以编程了你还得将它添加到全局缓存中在命令窗口中输入[path]Gacutil /i C:\WMSDK\WMPSDK\redist\wmppiadll(提供的全局缓存添加程序path是它的路径你可以用搜索功能来找到它)
完成上面的个步骤后就可以开始编写代码了为了使用pia我们必须要在代码的开头添加下面一条语句 Imports MicrosoftMediaPlayerInterop现在就可以开始我们的编程之旅了
右击 ide的控件工具箱在快捷菜单中单击自定义工具箱在自定义工具箱中选中windows media player并单击确定(图)
图
此时会在控件工具拦底部添加一个mendia的控件标志双击此控件将它放在窗
体上右击它并点击属性在出现的属性窗口(图)中将选择模式设置为none并单击确定这样做的目的是去掉原来的播放控件
然后在窗口中在添加如图的控件在属性窗口中将TrackBar控件的最大和最小值设定为和因为media的音量范围是到我们用TrackBar控件来调整播放音量Timer的interval设置为
现在可以输入以下代码了
Private Sub Button_Click(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles ButtonClick
打开和关闭所有光驱仓门
Dim i
Dim k = AxWindowsMediaPlayerunt()
If k > Then
For i = To k
AxWindowsMediaPlayercdromCollectionItem(i)eject()
Next
Else
AxWindowsMediaPlayercdromCollectionItem()eject()
End If
End Sub
Private Sub Form_Load(ByVal sender As Object
ByVal e As SystemEventArgs) Handles MyBaseLoad
获得计算机中有多少个光驱和它们的盘符
Dim i
Dim cdlabel As String
Dim k = AxWindowsMediaPlayerunt()
If k > Then
For i = To k
cdlabel = cdlabel &
AxWindowsMediaPlayercdromCollectionItem(i)driveSpecifier()
LabelText = 这台计算机共有 & k &
台CDROM & 分别是 & cdlabel &
Next
Else
cdlabel = cdlabel +
AxWindowsMediaPlayercdromCollectionItem()driveSpecifier()
LabelText = 这台计算机共有 & k &
台CDROM & 分别是 & cdlabel &
End If
End Sub
Private Sub Button_Click(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles ButtonClick
Dim strfilename As String
Dim OpenFileDialog As SystemWindowsFormsOpenFileDialog =
New SystemWindowsFormsOpenFileDialog()
OpenFileDialogShowDialog()
strfilename = OpenFileDialogFileName
AxWindowsMediaPlayerURL = strfilename
End Sub
Private Sub Button_Click(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles ButtonClick
AxWinntrolsplay()播放
End Sub
Private Sub Button_Click(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles ButtonClick
AxWinntrolsstop()停止
End Sub
Private Sub AxWindowsMediaPlayer_PlayStateChange(ByVal sender As Object
ByVal e As AxMicrosoftMediaPlayerInterop_WMPOCXEvents_PlayStateChangeEvent) Handles
AxWindowsMediaPlayerPlayStateChange
表示播放媒体发生变化时触发此事件
LabelText = 此文件播放总时间是 &
AxWindowsMediaPlayercurrentMediadurationString
TimerEnabled = True
LabelText = 标题 &
AxWindowsMediaPlayercurrentMediagetItemInfoBytype(Title )
LabelText = 作者 &
AxWindowsMediaPlayercurrentMediagetItemInfoBytype(Author )
End Sub
Private Sub Button_Click(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles ButtonClick
AxWinntrolspause()暂停
End Sub
Private Sub Timer_Tick(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles TimerTick
LabelText = 已经播放时间 &
CInt(AxWinntrolscurrentPosition) & 秒
End Sub
Private Sub TrackBar_Scroll(ByVal sender As SystemObject
ByVal e As SystemEventArgs) Handles TrackBarScroll
AxWindowsMediaPlayersettingsvolume = TrackBarValue调整输出音量
End Sub
程序说明当你按下F开始编译时系统会提示你有一个错误这个错误就是在Windows 窗体设计器生成的代码中的MeAxWindowsMediaPlayerenabled = True这条语句引起的其原因是media player 的控件的兼容问题此问题已经得到微软的证实在下一版本中即将不会有此问题在此版本中解决方法是将此代码去掉即可
文中使用的getItemInfoBytype属性是用来读取元数据的中的信息(对于元数据的定义见sdk)这些信息是在媒体建立时输入进去的但是这个属性并不会在你编写代码时自动出现有就是说不具备智能填充功能其原因是media player 控件的某些新功能是通过接口发布的而未在com类型库中发布所以不具备智能填充功能不过你可以按照sdk给出的语法书写编译器不会识别不出来的程序中对文件的播放时间的计算单位是秒如果你感兴趣可以将它转换为mmss的格式
运行如图
图