mciSendStringで再生終了時にメッセージを表示するには?

タグの編集
投稿者 よっしー26  (社会人) 投稿日時 2017/3/30 01:01:22
表題の通りmciSendStringで再生終了時に「再生終了」というような
メッセージを表示したいのですが、再生されると同時にメッセージが
表示されてしまいます。

どのようにすれば、再生が終了してからメッセージを表示することが
できるのでしょうか?

Private Sub Button1_Click(ByVal sender As Object, _
        ByVal e As EventArgs) Handles Button1.Click
    '再生するファイル名
    Dim fileName As String = "C:\music.mid"

    Dim cmd As String
    'ファイルを開く
    cmd = "open """ + fileName + """ alias " + aliasName
    If mciSendString(cmd, Nothing, 0, IntPtr.Zero) <> 0 Then
        Return
    End If '再生する
    cmd = "play " + aliasName
    mciSendString(cmd, Nothing, 0, IntPtr.Zero)

    MsgBox("再生終了")
End Sub
投稿者 まりもん  (社会人) 投稿日時 2017/3/30 10:32:31
http://rucio.a.la9.jp/main/kikou/kikou3_mciSendString.html
こちらが参考になると思います。
投稿者 さばみそ煮  (社会人) 投稿日時 2017/3/30 13:40:58
WMP使うのが簡単でいいと思うけど
投稿者 よっしー26  (社会人) 投稿日時 2017/3/31 23:32:18
まりもんさん、さばみそ煮さん、ご回答ありがとうございます。

とりあえず、まりもんさんに教えて頂いたHPを参考にコードを下記のように変更したのですが、
mp3ファイルを再生し終えてもメッセージが表示されません。

どのようにすれば、再生が終わったらメッセージを表示できるのでしょうか?


Const WM_MCINOTIFY As Integer = &H9B3 'mciSendString の処理終了を表す定数   ←追加
Const MCI_NOTIFY_SUCCESSFUL As Integer  = &H1 '処理成功を表す定数   ←追加

Private Sub Button1_Click(ByVal sender As Object, _
         ByVal e As EventArgs) Handles Button1.Click

   '再生するファイル名
   Dim fileName As String = "C:\music.mid"

   Dim cmd As String

    'ファイルを開く
   cmd = "open """ + fileName + """ alias " + aliasName
   If mciSendString(cmd, "", 0, 0) <> 0 Then    ←変更 
     Return
   End If '再生する
   cmd = "play " + aliasName + " notify"   ←変更
   mciSendString(cmd, "", 0, Me.Handle.ToInt32)   ←変更

End Sub


以下を追加しました。

Protected Overrides sub WndProc(ByRef m As Message)
   If m.Msg = WM_MCINOTIFY AndAlso m.WParam.ToInt32 = MCI_NOTIFY_SUCCESSFUL Then
     MsgBox("再生終了")
   End If
   
   MyBase.WndProc(m)
   
End Sub
投稿者 まりもん  (社会人) 投稿日時 2017/4/3 10:33:40
元記事のMM_MCINOTIFYの値が違いますね。
Const MM_MCINOTIFY As Integer = &H3B9
としてください。
投稿者 よっしー26  (社会人) 投稿日時 2017/4/8 21:52:06
まりもん さん、回答ありがとう。

ご指摘いただいた値を直したところ、あっけなく解決しました。

またわからないことがありましたら、アドバイスをお願いします。