2010-03-19 7 views
1

나는 일시 중지/ff/rw/재생 오디오 파일 등 MCI 명령을 보내는 mp3 플레이어가 있고 내가 할 방법을 알아낼 수없는 유일한 MCI 명령을 보내고 말할 수 있습니다. 현재 노래가 끝나면 다음 노래를 재생하십시오.노래 연주가 끝났습니까? (C# MCI)

노래는 ListBox에 있습니다. 다음 곡을 실제로 선택하는 데 문제가 없습니다. 재생 목록에서 다음 노래를 재생하려면 일 때 을 찾아야합니다. 나는 모든

에서 어떤 도움을 감사하겠습니다

답변

5

한 달 정도 후이를 준설 미안하지만 난 더 좋은 답을 할 수 있습니다 생각 ...

당신은 초 일의 길이를 할 수있는, 또는 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); 
} 

이 나를 위해 잘 작동하는 것 같군 : 당신이 관심이 아무것도를 통해 오는 경우에 당신은 당신의 창을보고받는 메시지를 필터링 할 수 있습니다. 이게 도움이 되길 바란다. ;)

+0

감사합니다 힙합 가이! 이것은 매우 높이 평가되었으며, 나는 여러 해 동안 해결책을 찾고있었습니다. : D –

+0

콘솔 앱에 해당하는 내용은 무엇입니까? 콘솔 프로그램에서 오버라이드 할 WndProc은 없습니다. – lbrahim

1

당신이 MP3의 지속 시간을 확인하고 측면을 따라 타이머에게 MP3 재생을 유지할 수있는 당신을 :) 감사? mp3가 일시 정지 된 경우 타이머를 일시 중지하십시오. 노래의 재생 시간이 끝나면 다음 노래를 재생하십시오.

+0

불행히도 나는 트랙의 길이를 확인하는 방법을 모른다. MCI를 사용하여이 작업을 수행 할 수 있습니까? MCI 용 문서를 참조했지만 다소 제한적으로 보입니다. –

+1

Google 검색을 통해 초 단위로 길이를 알려줄이 클래스를 찾았습니다. http://devhood.com/tutorials/tutorial_details.aspx?tutorial_id=79 – scottm

+0

완벽! 감사합니다 Scottm : D –