Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Немогу поймать MCI_NOTIFY_SUCCESSFUL


Автор: navodri 29.6.2010, 13:27
Немогу поймать MCI_NOTIFY_SUCCESSFUL, при этом другие сообщения, например, MCI_NOTIFY_ABORTED, ловятся нормально.  В чём тут дело?

Код

var
 OpenParm: TMCI_Open_Parms;
begin
 ZeroMemory(@OpenParm, SizeOf(OpenParm));
 OpenParm.lpstrDeviceType := Pointer(MCI_DEVTYPE_CD_AUDIO);
 OpenParm.dwCallback := hWin; //Окно, что ловит сообщения
 OpenParm.lpstrElementName := DeviceChar;
 mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID or MCI_OPEN_ELEMENT, LongInt(@OpenParm));
 DeviceID := OpenParm.wDeviceID;

.............

   MM_MCINOTIFY:
    case LOWORD(wp) of
     MCI_NOTIFY_SUCCESSFUL: MessageBox(0,'Сообщение MCI_NOTIFY_SUCCESSFUL поймано!','', MB_OK);
     MCI_NOTIFY_ABORTED: MessageBox(0,'Сообщение MCI_NOTIFY_ABORTED поймано!','', MB_OK);
     MCI_NOTIFY_FAILURE: MessageBox(0,'Сообщение MCI_NOTIFY_FAILURE поймано!','', MB_OK);
     MCI_NOTIFY_SUPERSEDED: MessageBox(0,'Сообщение MCI_NOTIFY_SUPERSEDED поймано!','', MB_OK);
    end;

Автор: casinosoftguru 8.7.2010, 11:06
не уверен но если вот тут вставить MCI_CLOSE в список параметров
Код

mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID or MCI_OPEN_ELEMENT, LongInt(@OpenParm));

то возможно помогло бы.. судя по гуглу MCI_NOTIFY_SUCCESSFUL как раз относится к MCI_CLOSE - возникает когда проигрываемое медиа стопается ?

Автор: navodri 13.7.2010, 20:11
Вроде бы вся проблема в новом драйвере MCI. Но странно, что Майкрософт не спешат её исправлять...

Автор: navodri 21.7.2010, 15:39
Ребята, плиз. Может, у кого-нибудь заработает следующий код. Проверьте, как будет время.

Код

...

  private
    procedure MCINOTIFY(var msg:TMessage); message MM_MCINOTIFY;

...

procedure TForm1.MCINOTIFY(var msg: TMessage);
begin
 case msg.WParam of
  MCI_NOTIFY_SUCCESSFUL: MessageBox(0,'Сообщение MCI_NOTIFY_SUCCESSFUL поймано!','', MB_OK);
  MCI_NOTIFY_ABORTED: MessageBox(0,'Сообщение MCI_NOTIFY_ABORTED поймано!','', MB_OK);
  MCI_NOTIFY_FAILURE: MessageBox(0,'Сообщение MCI_NOTIFY_FAILURE поймано!','', MB_OK);
  MCI_NOTIFY_SUPERSEDED: MessageBox(0,'Сообщение MCI_NOTIFY_SUPERSEDED поймано!','', MB_OK);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 PlayParm: TMCI_Play_Parms;
 OpenParm: TMCI_Open_Parms;
 DeviceID: Integer;
begin
 ZeroMemory(@OpenParm, SizeOf(OpenParm));
 OpenParm.lpstrDeviceType := Pointer(MCI_DEVTYPE_CD_AUDIO); //указали, что хотим воспроизвести аудио-диск
 OpenParm.dwCallback := Form1.Handle; //Окно, что ловит сообщения
 OpenParm.lpstrElementName := 'H'; //буква диска
 mciSendCommand(0, MCI_OPEN, MCI_OPEN_TYPE or MCI_OPEN_TYPE_ID or MCI_OPEN_ELEMENT, LongInt(@OpenParm)); //Открыли устройство
 DeviceID := OpenParm.wDeviceID;

 ZeroMemory(@PlayParm, SizeOf(PlayParm));
 PlayParm.dwCallback := Form1.Handle;
 mciSendCommand(DeviceID, mci_Play, MCI_NOTIFY, Integer(@PlayParm)) //Запустили проигрывание
end;


Пы.Сы. MCI_NOTIFY_SUCCESSFUL приходит, когда аудио-диск польностью проигран. Точнее раньше приходил, на более старом железе и системой WindowsXP. У кого-то мой код работает?
Может, у кого-нибудь есть пример, где MCI_NOTIFY_SUCCESSFUL успешно ловиться? Пожалуйста, поделитесь.

Автор: navodri 9.8.2010, 13:00
Ребята, ну помогите! Неужели нет никаких соображений?

Вот мой исходник:

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)