c# - 歌曲播放完了吗? (C# MCI)

标签 c# winforms command next mci

我有一个 mp3 播放器,它发送 MCI 命令来播放暂停/关闭/读取/停止音频文件等,我唯一不知道该怎么做的是发送一个 MCI 命令来告诉它播放下一个当前歌曲播放完毕时的歌曲。

歌曲在列表框中。我实际上选择下一首歌曲没有问题,我只需要找出何时播放播放列表中的下一首歌曲。如果有任何帮助,我将不胜感激

谢谢你:)

最佳答案

很抱歉在大约一个月后才将其疏通,但我认为我可能有更好的答案...

你可以做以秒为单位的长度,或者你可以让 MCI 自己通知你。

当您发送“播放”命令时,在媒体别名后加上“通知”,然后传递您的窗口句柄(我使用的是 System.Windows.Forms,因此使用“this.Handle”),就像这样:

uint playOk = mciSendString("play MediaFile notify", null, 0, this.Handle);

这会告诉 MCI 在命令完成或中断时向您发送通知。然后您可以过滤您的窗口收到的消息,看看是否有您感兴趣的消息:

private const int MM_MCINOTIFY = 0x03b9;
private const int MCI_NOTIFY_SUCCESS = 0x01;    
private const int MCI_NOTIFY_SUPERSEDED = 0x02;
private const int MCI_NOTIFY_ABORTED = 0x04;
private const int MCI_NOTIFY_FAILURE = 0x08;

protected override void WndProc(ref Message m)
{
  if (m.Msg == MM_MCINOTIFY)
  {
    switch (m.WParam.ToInt32())
    {
      case MCI_NOTIFY_SUCCESS:
        // success handling
        break;
      case MCI_NOTIFY_SUPERSEDED:
        // superseded handling
        break;
      case MCI_NOTIFY_ABORTED:
        // abort handling
        break;
      case MCI_NOTIFY_FAILURE:
        // failure! handling
        break;
      default:
        // haha
        break;
    }
  }
  base.WndProc(ref m);
}

这对我来说似乎工作得很好。我希望这有帮助。 ;)

关于c# - 歌曲播放完了吗? (C# MCI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474656/

相关文章:

c# - 如何在ASP.net网页的服务器端使用文本文件读写?

c# - 是否有任何带有 C# 代码完成插件的 emacs 或 vim 编辑器?

winforms - 如何更改 Window.Forms 应用程序图标

c# - 无法获得产品数量

powershell - 如何引用列表框项目

svn - 如何在出现确认提示后删除 SVN 目录?

git - 命令 git 中的 "develop"和 "origin/develop"有什么区别

linux - drwxr -xr -x 2 2是什么意思

c# - 从类型参数创建继承类

c# - C# 类库的线程本地存储