[編集]
これは、Hans Passant のコメントの後の作業コードであり、コンパイルしてテストするのに役立ちました。このコードは、ムービーの長さをコンパイルして表示します。
using System;
using WMPLib;
namespace MediaPlayer
{
class Program
{
static WindowsMediaPlayer wmp = new WindowsMediaPlayer();
static void Main(string[] args)
{
wmp.URL = @"c:\Wildlife.wmv";
wmp.PlayStateChange += new _WMPOCXEvents_PlayStateChangeEventHandler(wmp_PlayStateChange);
Console.ReadKey();
}
static void wmp_PlayStateChange(int NewState)
{
if (NewState == 3)
{
Console.WriteLine("Duration = " + wmp.currentMedia.durationString);
}
}
}
}
[古い回答]
私はこのことについて何も知りませんが、ここに私の見解があります。プレーヤーの状態は、まだメディアで報告できるレベルではありません。以下のコードは、ここで一緒にスローされるだけで、コンパイルすらできない可能性があります。MSDN から:
ユーザーのライブラリにないファイルのデュレーションを取得するには、Windows Media Player がファイルを開くのを待つ必要があります。つまり、現在の OpenState は MediaOpen と等しくなければなりません。これは、Player.OpenStateChange イベントを処理するか、Player.openState の値を定期的にチェックすることで確認できます。
using WMPLib;
class Program
{
static void Main(string[] args)
{
// this file is called Interop.WMPLib.dll
WindowsMediaPlayer wmp = new WindowsMediaPlayer();
wmp.URL = @"c:\TORRENT.KG\Assault.girls.2009.DVDRip.Rus.Eng.avi";
wmp.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(wmp_PlayStateChange);
Console.ReadKey();
}
void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
if (e.newState == 3)
{
Console.WriteLine("Duration = " + wmp.currentMedia.durationString);
}
}
}