Windows Media Player 9.0是微软推出的最新数字媒体播放器,它除了继承了media player 8.0的优秀之处外,还添加了许多的实用功能。不过这些功能并不是本文讲述的重点,本文要讲的是如何利用media player来编写一个自己的嵌入式软件,并让它拥有播放cd,vcd,avi,mp3等的功能。
要编写这个程序你首先要熟悉vb.net,因为本程序是使用vb.net编写。在你的计算机上要安装windows media player 9.0。最后最关键的是要安装windows mendia player 9.0 sdk,在sdk中包含了一个dll,这个dll的作用是完成com和.net之间的转换,因为media player 9.0的编程要使用一个media player 9.0 activeX控件,而activeX的本质就是一个com。对于windows mendia player 9.0 sdk可以到微软的msdn去下载。
完成上面3个软件的安装后还不可以动手编写代码,因为要保证mendia player 9.0要与.net框架通信,还必须注册mendia player 9.0的pia,所谓pia是"Primary interop assemblies"的缩写本人将它翻译为"原始内部汇编集",之所以要先注册它是因为com技术诞生在.net技术之前要让com和.net通信就要一个中间层来连接这两边在mendia player 9.0中使用mendia player 9.0 sdk redist目录下的wmppia.dll来注册mendia player 9.0的pia,在命令窗口中输入:[path]regasm c:WMSDKWMPSDK9 redistwmppia.dll(regasm是.net提供的pia注册程序,path是它的路径,你可以用搜索功能来找到它)。
各位别以为注册了pia就可以编程了,你还得将它添加到全局缓存中。在命令窗口中输入:[path]Gacutil /i C:WMSDKWMPSDK9redistwmppia.dll(Gacutil是.net提供的全局缓存添加程序,path是它的路径,你可以用搜索功能来找到它)
完成上面的5个步骤后就可以开始编写代码了。为了让.net使用pia,我们必须要在代码的开头添加下面一条语句: Imports Microsoft.MediaPlayer.Interop现在就可以开始我们的编程之旅了。
右击vs.net ide的控件工具箱,在快捷菜单中单击"自定义工具箱",在"自定义工具箱"中选中"windows media player"并单击"确定"(图1)
图1
此时会在控件工具拦底部添加一个mendia的控件标志。双击此控件,将它放在窗
体上。右击它并点击"属性"在出现的属性窗口(图2)中将"选择模式"设置为"none"并单击"确定",这样做的目的是去掉原来的播放控件。
图2
然后在窗口中在添加如图3的控件,在属性窗口中将TrackBar1控件的最大和最小值设定为100和0,因为media的音量范围是0到100,我们用TrackBar1控件来调整播放音量。Timer1的interval设置为1000。
图3
现在可以输入以下代码了:
- PrivateSubButton1_Click(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesButton1.Click
- '打开和关闭所有光驱仓门
- Dimi
- Dimk=AxWindowsMediaPlayer1.cdromCollection.count()
- Ifk>1Then
- Fori=0Tok-1
- AxWindowsMediaPlayer1.cdromCollection.Item(i).eject()
- Next
- Else
- AxWindowsMediaPlayer1.cdromCollection.Item(0).eject()
- EndIf
- EndSub
- PrivateSubForm1_Load(ByValsenderAsObject,
- ByValeAsSystem.EventArgs)HandlesMyBase.Load
- '获得计算机中有多少个光驱和它们的盘符
- Dimi
- DimcdlabelAsString
- Dimk=AxWindowsMediaPlayer1.cdromCollection.count()
- Ifk>1Then
- Fori=0Tok-1
- cdlabel=cdlabel&
- AxWindowsMediaPlayer1.cdromCollection.Item(i).driveSpecifier()
- Label1.Text="这台计算机共有"&k&
- "台CD-ROM"&"分别是"&cdlabel&""
- Next
- Else
- cdlabel=cdlabel+
- AxWindowsMediaPlayer1.cdromCollection.Item(0).driveSpecifier()
- Label1.Text="这台计算机共有"&k&
- "台CD-ROM"&"分别是"&cdlabel&""
- EndIf
- EndSub
- PrivateSubButton2_Click(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesButton2.Click
- DimstrfilenameAsString
- DimOpenFileDialog1AsSystem.Windows.Forms.OpenFileDialog=
- NewSystem.Windows.Forms.OpenFileDialog()
- OpenFileDialog1.ShowDialog()
- strfilename=OpenFileDialog1.FileName
- AxWindowsMediaPlayer1.URL=strfilename
- EndSub
- PrivateSubButton3_Click(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesButton3.Click
- AxWindowsMediaPlayer1.controls.play()'播放
- EndSub
- PrivateSubButton5_Click(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesButton5.Click
- AxWindowsMediaPlayer1.controls.stop()'停止
- EndSub
- PrivateSubAxWindowsMediaPlayer1_PlayStateChange(ByValsenderAsObject,
- ByValeAsAxMicrosoft.MediaPlayer.Interop._WMPOCXEvents_PlayStateChangeEvent)Handles
- AxWindowsMediaPlayer1.PlayStateChange
- '表示播放媒体发生变化时触发此事件
- Label4.Text="此文件播放总时间是"&
- AxWindowsMediaPlayer1.currentMedia.durationString
- Timer1.Enabled=True
- Label5.Text="标题"&
- AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Title","",0)
- Label6.Text="作者"&
- AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Author",0)
- EndSub
- PrivateSubButton4_Click(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesButton4.Click
- AxWindowsMediaPlayer1.controls.pause()'暂停
- EndSub
- PrivateSubTimer1_Tick(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesTimer1.Tick
- Label2.Text="已经播放时间"&
- CInt(AxWindowsMediaPlayer1.controls.currentPosition)&"秒"
- EndSub
- PrivateSubTrackBar1_Scroll(ByValsenderAsSystem.Object,
- ByValeAsSystem.EventArgs)HandlesTrackBar1.Scroll
- AxWindowsMediaPlayer1.settings.volume=TrackBar1.Value'调整输出音量
- EndSub