王朝网络
分享
 
 
 

VB.net与Media Player9.0嵌入式开发【来自qddn】

王朝c#·作者佚名  2006-04-18
宽屏版  字体: |||超大  

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:\WMSDK\WMPSDK9\ redist\wmppia.dll(regasm是.net提供的pia注册程序,path是它的路径,你可以用搜索功能来找到它)。

各位别以为注册了pia就可以编程了,你还得将它添加到全局缓存中。在命令窗口中输入:[path]Gacutil /i C:\WMSDK\WMPSDK9\redist\wmppia.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

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

Private Sub Button1_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button1.Click

'打开和关闭所有光驱仓门

Dim i

Dim k = AxWindowsMediaPlayer1.cdromCollection.count()

If k > 1 Then

For i = 0 To k - 1

AxWindowsMediaPlayer1.cdromCollection.Item(i).eject()

Next

Else

AxWindowsMediaPlayer1.cdromCollection.Item(0).eject()

End If

End Sub

Private Sub Form1_Load(ByVal sender As Object,

ByVal e As System.EventArgs) Handles MyBase.Load

'获得计算机中有多少个光驱和它们的盘符

Dim i

Dim cdlabel As String

Dim k = AxWindowsMediaPlayer1.cdromCollection.count()

If k > 1 Then

For i = 0 To k - 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 & " "

End If

End Sub

Private Sub Button2_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button2.Click

Dim strfilename As String

Dim OpenFileDialog1 As System.Windows.Forms.OpenFileDialog =

New System.Windows.Forms.OpenFileDialog()

OpenFileDialog1.ShowDialog()

strfilename = OpenFileDialog1.FileName

AxWindowsMediaPlayer1.URL = strfilename

End Sub

Private Sub Button3_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button3.Click

AxWindowsMediaPlayer1.controls.play()'播放

End Sub

Private Sub Button5_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button5.Click

AxWindowsMediaPlayer1.controls.stop()'停止

End Sub

Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object,

ByVal e As AxMicrosoft.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)

End Sub

Private Sub Button4_Click(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Button4.Click

AxWindowsMediaPlayer1.controls.pause()'暂停

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles Timer1.Tick

Label2.Text = "已经播放时间" &

CInt(AxWindowsMediaPlayer1.controls.currentPosition) & "秒"

End Sub

Private Sub TrackBar1_Scroll(ByVal sender As System.Object,

ByVal e As System.EventArgs) Handles TrackBar1.Scroll

AxWindowsMediaPlayer1.settings.volume = TrackBar1.Value'调整输出音量

End Sub

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

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

运行如图4

图4

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有