电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> .NET
VB.net与Media Player9.0嵌入式开发-.NET教程,VB.Net语言
作者:网友供稿 点击:56
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
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控件来调整播放音量。t  imer1的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

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·经典收藏之 - C++内存管理详解-.NET教程,C#语言
·Master Page 初探-.NET教程,评论及其它
·GDI+编程10个基本技巧-.NET教程,评论及其它
·VB.NET中让Textbox只能输入数字(二)-.NET教程,VB.Net语言
·stl应用小问题-.NET教程,评论及其它
·WIN32中颜色值(COLORREF)与.NET中颜色值(Color)的转换-ASP教程,系统相关
·打造自己的专业图像工具-Visual C++ 2005图像编程系列【三】-.NET教程,C#语言
·.Net中常见问题及解决方法归类-.NET教程,.NET Framework
·Lex和Yacc从入门到精通(3)--一个极其简单的lex和yacc程序-.NET教程,评论及其它
·VB下几个非常有用的函数-.NET教程,VB.Net语言

最新文章
·VC#初学入门:第一个Windows程序
·ASP.NET 2.0-选用DataSet或DataReader
·用.net 处理xmlHttp发送异步请求
·asp.net创建文件夹的IO类的问题
·asp.net 2.0 中加密web.config 文件中的配置节
·关于ASP.NET调用JavaScript的实现
·如何实现ASP.NET网站个性化
·Acegi安全系统的配置-.NET教程,评论及其它
·Spring安全系统:Acegi Security Acegi简介-.NET教程,评论及其它
·Biztalk 开发之 架构和实例的验证-.NET教程,评论及其它


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号