前回のWindowsMediaPlayerコントロールを使って動画プレイヤーを作成するでは指定した部分だけを再生できるようなアプリとして作りましたが、指定すべき時間をどうやって取得するかは考えませんでした。従来のWindowsMediaPlayerを起動してやればいいのかもしれませんが、今回はキーとマウスでWindowsMediaPlayerコントロールを操作してみます。

まずはデザイナで以下のようなものをつくります。パネルをフォームに貼り付け、その下にトラックバーを貼り付けます。ステータスバーにテキストを表示させる領域を2つつくります。

パネルとトラックバーにAnchorを設定すればフォームの大きさが変更されたとき、これにあわせて表示位置とサイズを変更されるようになります。

でははじめてみましょう。

以下の部分は前回とほとんど同じです。1秒おきに再生位置を確認してトラックバーをこれに合わせさせます。

ドラッグアンドドロップすれば再生できるようにする

ファイルを指定するときにダイアログで指定してもいいのですが、基本管理人は面倒くさがりなのでフォームにドラッグアンドドロップすれば再生されるようにします。

まずドラッグアンドドロップされたときのイベントハンドラの引数 DragEventArgsからドロップされようとしているファイル名を取得するメソッドをつくります。

ファイルがドラッグアンドドロップされようとしているときで、ファイルの拡張子が.mp4のときだけファイルのパスを返します。それ以外のときは空文字列を返します。

ファイルがドラッグされドロップされたときの処理を示します。

動画の長さと現在位置を表示させる

あとは再生中かどうか調べて再生中であればその情報がわかるようにすればいいですね。1秒ごとにTimer_Tickが呼び出されるので再生されているファイルのパス、長さ、現在再生されている位置を取得してステータスバーに表示させ、トラックバーも移動させます。

トラックバーで再生位置を変更する

トラックバーを操作すれば再生位置を変更することができるようにします。なにもしなくても動画が再生されればトラックバーは移動します。これによって再生位置が毎秒変更されてはいけないので3秒以上のズレがない場合はなにもしません。それ以上にトラックバーのValueと再生位置がずれている場合はユーザーによるトラックバーの操作とみなして再生位置を変更します。

実際に試してみると、トラックバーを移動することで現在の再生位置も変更されます。これならトラックバーをドラッグしながら再生状態を確認できるので便利です。

ただ再生自体はおこなわれているのでトラックバーはドラッグ中であっても移動していることに気づきます。ドラッグ中は一時停止状態になってほしいものです。

TrackBar.Valueがユーザーによって変更されたら一時停止状態にすればいいのですが、これではうまくいきません。一時停止から復帰することができないのでトラックバーを移動してもその部分の再生状態が表示されません。

そこで一時停止状態でトラックバーを移動したら再生状態にしてすぐに一時停止状態に変更します。これならトラックバーを移動することでその部分の再生状態が表示されるようになります。

のちのことを考えてこの部分は別メソッドにしました。

キー入力で再生位置を変更する

一時停止状態から再生状態に戻す手段も用意しておかなければなりません。スペースキーをおせば一時停止と再生を切り替えることができるようにします。

それ以外の機能も追加します。左右の方向キーでも再生位置を変更できるようにして、Ctrlキーもいっしょに押せば10秒間前または後に移動できるようにしました。それからCを押せば動画の状態(ファイル名、長さ、現在位置)をクリップボードにコピーできるようにしました。

左右のキーが押されたときに再生位置を変更する処理を示します。

現在の状態をクリップボードにコピーする処理を示します。