【发布时间】:2011-01-29 07:12:33
【问题描述】:
我有一个 mp3 播放器,它发送 MCI 命令来播放暂停/ff/rw/停止音频文件等,我唯一不知道该怎么做的就是发送一个 MCI 命令来告诉它播放下一个当前播放完毕后的歌曲。
歌曲在 ListBox 中。我实际上选择下一首歌曲没有问题,我只需要找出何时播放播放列表中的下一首歌曲。如果有任何帮助,我将不胜感激
谢谢你:)
【问题讨论】:
标签: c# winforms command next mci
我有一个 mp3 播放器,它发送 MCI 命令来播放暂停/ff/rw/停止音频文件等,我唯一不知道该怎么做的就是发送一个 MCI 命令来告诉它播放下一个当前播放完毕后的歌曲。
歌曲在 ListBox 中。我实际上选择下一首歌曲没有问题,我只需要找出何时播放播放列表中的下一首歌曲。如果有任何帮助,我将不胜感激
谢谢你:)
【问题讨论】:
标签: c# winforms command next 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);
}
这对我来说似乎工作得很好。我希望这有帮助。 ;)
【讨论】:
WndProc。
你能检查 mp3 的持续时间并在 mp3 播放的同时保持一个计时器吗?当 mp3 暂停时暂停计时器等。当歌曲的持续时间播放完后,播放下一首歌曲。
【讨论】: