VB.net与Media Player9.0嵌入式开发

前端之家收集整理的这篇文章主要介绍了VB.net与Media Player9.0嵌入式开发前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

现在可以输入以下代码了:

Code:
  1. @H_403_33@Private@H_403_33@Sub@H_403_33@Button1_Click(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  2. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@Button1.Click
  3. @H_403_33@'打开和关闭所有光驱仓门 @H_403_33@
  4. @H_403_33@Dim@H_403_33@i
  5. @H_403_33@Dim@H_403_33@k=AxWindowsMediaPlayer1.cdromCollection.count()
  6. @H_403_33@If@H_403_33@k>1Then@H_403_33@
  7. @H_403_33@For@H_403_33@i=0To@H_403_33@k-1
  8. @H_403_33@AxWindowsMediaPlayer1.cdromCollection.Item(i).eject()
  9. @H_403_33@Next@H_403_33@
  10. @H_403_33@Else@H_403_33@
  11. @H_403_33@AxWindowsMediaPlayer1.cdromCollection.Item(0).eject()
  12. @H_403_33@End@H_403_33@If@H_403_33@
  13. @H_403_33@End@H_403_33@Sub@H_403_33@
  14. @H_403_33@Private@H_403_33@Sub@H_403_33@Form1_Load(ByVal@H_403_33@senderAs@H_403_33@Object@H_403_33@,
  15. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@MyBase@H_403_33@.Load
  16. @H_403_33@'获得计算机中有多少个光驱和它们的盘符 @H_403_33@
  17. @H_403_33@Dim@H_403_33@i
  18. @H_403_33@Dim@H_403_33@cdlabelAs@H_403_33@String@H_403_33@
  19. @H_403_33@Dim@H_403_33@k=AxWindowsMediaPlayer1.cdromCollection.count()
  20. @H_403_33@If@H_403_33@k>1Then@H_403_33@
  21. @H_403_33@For@H_403_33@i=0To@H_403_33@k-1
  22. @H_403_33@cdlabel=cdlabel&
  23. @H_403_33@AxWindowsMediaPlayer1.cdromCollection.Item(i).driveSpecifier()
  24. @H_403_33@Label1.Text="这台计算机共有"@H_403_33@&k&
  25. @H_403_33@"台CD-ROM"@H_403_33@&"分别是"@H_403_33@&cdlabel&""@H_403_33@
  26. @H_403_33@Next@H_403_33@
  27. @H_403_33@Else@H_403_33@
  28. @H_403_33@cdlabel=cdlabel+
  29. @H_403_33@AxWindowsMediaPlayer1.cdromCollection.Item(0).driveSpecifier()
  30. @H_403_33@Label1.Text="这台计算机共有"@H_403_33@&k&
  31. @H_403_33@"台CD-ROM"@H_403_33@&"分别是"@H_403_33@&cdlabel&""@H_403_33@
  32. @H_403_33@End@H_403_33@If@H_403_33@
  33. @H_403_33@End@H_403_33@Sub@H_403_33@
  34. @H_403_33@Private@H_403_33@Sub@H_403_33@Button2_Click(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  35. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@Button2.Click
  36. @H_403_33@Dim@H_403_33@strfilenameAs@H_403_33@String@H_403_33@
  37. @H_403_33@Dim@H_403_33@OpenFileDialog1As@H_403_33@System.Windows.Forms.OpenFileDialog=
  38. @H_403_33@New@H_403_33@System.Windows.Forms.OpenFileDialog()
  39. @H_403_33@OpenFileDialog1.ShowDialog()
  40. @H_403_33@strfilename=OpenFileDialog1.FileName
  41. @H_403_33@AxWindowsMediaPlayer1.URL=strfilename
  42. @H_403_33@End@H_403_33@Sub@H_403_33@
  43. @H_403_33@Private@H_403_33@Sub@H_403_33@Button3_Click(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  44. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@Button3.Click
  45. @H_403_33@AxWindowsMediaPlayer1.controls.play()'播放 @H_403_33@
  46. @H_403_33@End@H_403_33@Sub@H_403_33@
  47. @H_403_33@Private@H_403_33@Sub@H_403_33@Button5_Click(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  48. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@Button5.Click
  49. @H_403_33@AxWindowsMediaPlayer1.controls.stop()'停止 @H_403_33@
  50. @H_403_33@End@H_403_33@Sub@H_403_33@
  51. @H_403_33@Private@H_403_33@Sub@H_403_33@AxWindowsMediaPlayer1_PlayStateChange(ByVal@H_403_33@senderAs@H_403_33@Object@H_403_33@,
  52. @H_403_33@ ByVal@H_403_33@eAs@H_403_33@AxMicrosoft.MediaPlayer.Interop._WMPOCXEvents_PlayStateChangeEvent)Handles@H_403_33@
  53. @H_403_33@ AxWindowsMediaPlayer1.PlayStateChange
  54. @H_403_33@'表示播放媒体发生变化时触发此事件 @H_403_33@
  55. @H_403_33@Label4.Text="此文件播放总时间是"@H_403_33@&
  56. @H_403_33@AxWindowsMediaPlayer1.currentMedia.durationString
  57. @H_403_33@Timer1.Enabled=True@H_403_33@
  58. @H_403_33@Label5.Text="标题"@H_403_33@&
  59. @H_403_33@AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Title"@H_403_33@,""@H_403_33@,0)
  60. @H_403_33@Label6.Text="作者"@H_403_33@&
  61. @H_403_33@AxWindowsMediaPlayer1.currentMedia.getItemInfoBytype("Author"@H_403_33@,0)
  62. @H_403_33@End@H_403_33@Sub@H_403_33@
  63. @H_403_33@Private@H_403_33@Sub@H_403_33@Button4_Click(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  64. @H_403_33@ ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@Button4.Click
  65. @H_403_33@AxWindowsMediaPlayer1.controls.pause()'暂停 @H_403_33@
  66. @H_403_33@End@H_403_33@Sub@H_403_33@
  67. @H_403_33@Private@H_403_33@Sub@H_403_33@Timer1_Tick(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  68. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@Timer1.Tick
  69. @H_403_33@Label2.Text="已经播放时间"@H_403_33@&
  70. @H_403_33@CInt@H_403_33@(AxWindowsMediaPlayer1.controls.currentPosition)&"秒"@H_403_33@
  71. @H_403_33@End@H_403_33@Sub@H_403_33@
  72. @H_403_33@Private@H_403_33@Sub@H_403_33@TrackBar1_Scroll(ByVal@H_403_33@senderAs@H_403_33@System.Object@H_403_33@,
  73. @H_403_33@ByVal@H_403_33@eAs@H_403_33@System.EventArgs)Handles@H_403_33@TrackBar1.Scroll
  74. @H_403_33@AxWindowsMediaPlayer1.settings.volume=TrackBar1.Value'调整输出音量 @H_403_33@
  75. @H_403_33@End@H_403_33@Sub@H_403_33@

程序说明:当你按下F5开始编译时,系统会提示你有一个错误,这个错误就是在"Windows 窗体设计器生成代码"中的"Me.AxWindowsMediaPlayer1.enabled = True"这条语句引起的,其原因是media player 9.0的控件与.net的兼容问题,此问题已经得到微软的证实,在下一版本中即vs2003.net将不会有此问题,在此版本中解决方法是将此代码去掉即可。

文中使用的getItemInfoBytype属性是用来读取元数据的中的信息(对于元数据的定义见sdk),这些信息是在媒体建立时输入进去的,但是这个属性并不会在你编写代码自动出现,有就是说不具备智能填充功能,其原因是media player 9.0控件的某些新功能是通过接口发布的,而未在com类型库中发布,所以不具备智能填充功能。不过你可以按照sdk给出的语法书写,编译器不会识别不出来的。程序中对文件的播放时间的计算单位是秒,如果你感兴趣可以将它转换为mm:ss的格式。

运行如图4

猜你在找的VB相关文章