Désolé pour draguer ce après un mois, mais je pense je peux avoir une plus belle réponse ...
Vous pouvez faire la longueur en seconde chose, ou vous pouvez MCI vous informer lui-même . Lorsque vous envoyez votre commande "play", cliquez sur "notify" après l'alias du média, puis passez le handle de votre fenêtre (j'utilise System.Windows.Forms, d'où le 'this.Handle'), comme donc:
uint playOk = mciSendString("play MediaFile notify", null, 0, this.Handle);
Ceci indique à MCI de vous envoyer une notification lorsque la commande est terminée ou est interrompue. Ensuite, vous pouvez simplement filtrer les messages de votre fenêtre reçoit pour voir si tout ce que vous êtes intéressé vient par:
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);
}
Cela semble fonctionner très bien pour moi. J'espère que ça aide. ;)
Merci tas Guy! C'est très apprécié, je cherchais une solution depuis des lustres. : D –
Quel serait l'équivalent pour les applications console? Il n'y a pas de 'WndProc' à remplacer dans les programmes de la console. – lbrahim