|
分類:[VB.NET/VB2005 以降]
Win8.1+VB2010+.NET Framework4.0を使用しています。
mcisendstringを使って動画を操作するプログラムを作っているのですが、対象の動画がwmv形式だと、動画の最後から50〜100ミリ秒程度の内容がシークで表示できません。
ソースコードは以下の通りです。
(横スクロールバー、ピクチャーボックスを1つずつ、ボタンを2つ貼り付けたフォームにて実行しています。)
Public Class Form1
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As IntPtr) As Integer
Const strAlias As String = "MyVideo"
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim Ofd As New OpenFileDialog() 'ファイルダイアログ
Dim Posi As String = ""
With Ofd
.InitialDirectory = My.Application.Info.DirectoryPath
.Filter = "wmv|*.wmv;"
If .ShowDialog() = DialogResult.OK Then
If .FileName <> "" And Dir(.FileName) <> "" Then
Call SendString("close " & strAlias)
Call SendString("open " & """" & .FileName & """" & " alias " & strAlias & " wait")
Call SendString("window " & strAlias & " handle " & CStr(PictureBox1.Handle) & " wait")
Call SendString("Set " & strAlias & " time format milliseconds")
Call SendString("status " & strAlias & " length", Posi)
With HScrollBar1
.Maximum = CInt(Val(Posi))
.Minimum = 0
.Value = 0
.LargeChange = 1
.SmallChange = 1
End With
End If
End If
End With
End Sub
Private Function SendString(ByVal cmdString As String, Optional ByRef message As String = "") As Boolean
message = Space(500)
Return CBool(mciSendString(cmdString, message, Len(message), PictureBox1.Handle))
End Function
Private Sub HScrollBar1_Scroll(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles HScrollBar1.Scroll
Dim Posi As String = ""
Call SendString("seek " & strAlias & " to " & HScrollBar1.Value)
Call SendString("status " & strAlias & " position", Posi)
Me.Text = CStr(HScrollBar1.Value) & "," & Posi
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Call SendString("play " & strAlias & " from " & CStr(HScrollBar1.Value))
End Sub
End Class
検証に使用している動画はこちらです。
http://www1.axfc.net/u/3306222/test
動画の最後は映像が白くなるようにしているのですが、スクロールバーを最後まで動かしてもそのシーンが表示されません。
(ただし、ボタン2をクリックして再生すると白くなるシーンが表示されます。)
何か対処法はあるのでしょうか。
|