Извините драги это после месяца или около того, но я думаю, что у меня может быть приятнее ответ ...
Вы можете сделать длину в секундах вещи, или вы можете иметь 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);
}
Это, кажется, работает очень хорошо для меня. Надеюсь, это поможет. ;)
Спасибо кучи Гай! Это очень ценится, я искал решение на века. : D – 2010-04-07 09:35:38
Что было бы эквивалентно этому для консольных приложений? В консольных программах «WndProc» не переопределяется. – lbrahim