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控件來調整播放音量T imer的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的格式
運行如圖
圖
From:http://tw.wingwit.com/Article/program/net/201311/13204.html