2012-04-12 109 views
0

使用.NET Windows Media Player庫,我已經能夠以編程方式獲取和更改Windows Media Player的各種文件屬性(如用戶評分)。我希望通過調用Player.openPlayer(url)來使用相同的庫來控制(播放,停止,下一次等)Windows Media Player實例。理論上來說,這應該是非常有可能通過Player.controls對象,但是當我去訪問它們時,沒有任何控件可用。除了控件對象之外,幾乎所有的播放器屬性/方法/事件都可用於我。下面是一些示例代碼來說明我已經試過:通過IronPython控制Windows Media Player實例的問題

import clr 
clr.AddReferenceToFile("Interop.WMPLib.dll") 
from Interop.WMPLib import WindowsMediaPlayerClass 
wmp = WindowsMediaPlayerClass() 
wmp.openPlayer(r"C:\Users\Public\Music\Sample Music\Kalimba.mp3") 

這工作得很好,但是當我做到以下幾點:

print wmp.controls.isAvailable("play").ToString() 
print wmp.controls.isAvailable("pause").ToString() 
print wmp.controls.isAvailable("stop").ToString() 
... 

我得到每個控制假。爲什麼這些控件不適用於我的(簡單)應用程序?我可能會以這種錯誤的方式去做?我使用WMP 12,所以它應該比兼容更多。我真的不想使用其他API,但我願意嘗試此時的任何事情。

下面是引用文檔:http://msdn.microsoft.com/en-us/library/dd564034%28v=vs.85%29.aspx

編輯:快速修復被持有了,但我仍然沒有找到一個實際的解決辦法呢。

+0

問題根本不清楚嗎? – covertCoder 2012-04-13 13:44:16

+0

不,但這需要一個非常罕見的知識交集 - 您可能是第一個使用IronPython來控制WMP的人。 :)如果忽略'isAvailable'並只調用'play()'會發生什麼? – 2012-04-16 22:39:25

+0

沒有任何反應,與所有其他控制功能相同。其他函數不會返回錯誤,但它們也不會執行其預期的功能。我目前的quickfix每次打開一個新的播放列表/媒體文件時都會調用Player.openPlayer,但這通常會讓WMP實例閃爍,或者最糟糕的情況下,我會從其他任何我正在做的事情中集中注意力。 – covertCoder 2012-04-17 13:11:10

回答

0

嘗試

print wmp.controls.get_isAvailable("play"); 
print wmp.controls.get_isAvailable("stop"); 
etc. 

,但請記住,直到你進入所述WMP控制文件加載這些控件將不可用。

首先將wmp.URL設置爲您要播放的文件的路徑,然後在完成加載時簡單地調用wmp.controls.play();。您可以偵聽OpenStateChange事件以確定它是否已加載。

+0

問題是無論我如何加載wmp實例,wmp.controls.play()都不起作用。我試過wmp.URL,wmp.launchURL,wmp.openPlayer等,但wmp.controls。 ()仍然沒有做任何事情。另外,wmp.controls.get_isAvailable(「control」)會返回一個錯誤,可能是因爲正確的函數是wmp.controls.isAvailable(「control」),但是之後我再也無法正常工作了。我確定在調用這些控件之前它已經被加載了,但是OpenStateChange也從未觸發過這麼... – covertCoder 2012-04-18 13:30:22

+0

你是否嘗試過偵聽'Error','MediaError'或'StatusChange'事件?有事件發生嗎?他們可能會幫助追查錯誤。玩家本身不是'WindowsMediaPlayer'類(沒有'class'後綴)? – marmulin 2012-04-19 10:52:18

+0

從我的理解,WindowsMediaPlayer是抽象類和WindowsMediaPlayerClass(在文檔中稱爲播放器)是實際的API。請記住,此API用於編寫腳本,並不一定與其他WMP API相同。我試着聽過上述事件,但是當我手動或以編程方式使用播放器時,其中沒有一個會觸發。足以說,這些文檔對可以做什麼和不可以做什麼有點困惑。 – covertCoder 2012-04-23 14:28:20