2012-04-12 7 views
0

.NET Windows Media Playerライブラリを使用して、Windows Media Playerのさまざまなファイルプロパティ(ユーザー評価など)をプログラムで取得および変更することができました。 Player.openPlayer(url)呼び出しで、同じライブラリを使用してWindows Media Playerインスタンスを制御(再生、停止、次など)したいと考えています。理論的には、これはPlayer.controlsオブジェクトを通して非常に可能でなければなりませんが、私がそれらにアクセスするときにはコントロールのどれも利用できません。ほとんどのPlayerプロパティ/メソッド/イベントは、コントロールオブジェクトを除いて利用できます。ここで私が試したものを説明するためにいくつかのサンプルコードは次のとおりです。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

+0

いいえ、それは知識の非常にまれな交差点を必要とします - IronPythonを使用してWMPを制御する最初の人物かもしれません。 :) 'isAvailable'を無視して' play() 'を呼び出すとどうなりますか? –

+0

他のすべての制御機能と同じことは起こりません。他の関数はエラーを返しませんが、意図した機能を実行しません。私の現在のクイックフィックスは、新しいプレイリスト/メディアファイルを開くたびにPlayer.openPlayerを呼び出すことですが、これはWMPインスタンスを点滅させるか、最悪の場合、私がやっていることから重視します。 – covertCoder

答えて

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

+0

'Error'、' MediaError'または 'StatusChange'イベントをリッスンしましたか?どんな出来事が起きますか?彼らはエラーを追跡するのに役立つかもしれません。また、プレーヤー自体が 'WindowsMediaPlayer'クラス( 'class'サフィックスなし)ではありませんか? – marmulin

+0

私の理解から、WindowsMediaPlayerは抽象クラスであり、WindowsMediaPlayerClass(Playerというドキュメントで知られています)は実際のAPIです。このAPIはスクリプティングのためのものであり、必ずしも他のWMP APIと同じであるとは限りません。私は前述のイベントを聞いてみましたが、プレイヤーを手動またはプログラムで使用した場合は、いずれも起動しません。確かに、ドキュメンテーションは、できることとできないことを少し混乱させています。 – covertCoder

関連する問題