Интерфейс управления устройствами MCI (Media Control Interface)

ОГЛАВЛЕНИЕ

Интерфейс управления устройствами MCI (Media Control Interface) позволяет программам для Windows работать с различными устройствами мультимедиа которые включают в себя CD-ROM, звуковую карту, проигрыватель видеодисков, даже видеомагнитофон и т.д. При помощи функций MCI мы можем управлять выше перечисленными устройствами, посылая им специальные команды такие как: воспроизведение, остановка, воспроизведение с заданной позиции и т.д.

Конкретный набор команд соответствует каждому устройству свой. Эту команду мы передаем в функцию интерфейса MCI.

Все функции интерфейса MCI начинаются с префикса mci и делятся на три группы:

  • интерфейс команд сообщений:
    mciSendCommand()
    mciGetDeviceID()
  • интерфейс команд строк:
    mciSendString()
  • оба типа интерфейса:
    mciGetErrorString()
    mciSetYieldProc()

Две функции высокого уровня - mciSendCommand() и mciSendString() выполняют одну и туже функцию. Отличие между ними заключается в способе подачи команд.

Первую функцию, которую мы рассмотрим будет mciSendCommand(). Она описывается следующим образом:

DWORD mciSendCommand(MCIDEVICEID IDDevice,
UINT uMsg,
DWORD fdwCommand,
DWORD dwParam)

где:

  • IDDevice - идентификатор MCI-устройства, которому адресуется команда. При открытии устройства этот параметр не используется, т.е. NULL.
  • uMsg - команда
  • fdwCommand - флаги для команды
  • dwParam - указатель на структуру с параметрами для командного сообщения

Если функция возвращает 0, то все в полном порядке. В случае ошибки функция возвращает код ошибки. Сам код ошибки находится в младшем байте слова, а в старшем, где должен был бы находится код нашего устройства, будет 0.

Следует акцентировать Ваше внимание на четвертом параметре этой функции. Различные команды пользуются различными наборами исходных данных. Перед тем как вызвать функцию, мы должны заполнить структуру данными, необходимыми для выполнения только одной нужной нам команды.

Что же представляет из себя функция mciSendString() ?
Вот ее описание:

DWORD mciSendString(LPTSTR lpszCommand,
LPTSTR lpszReturnString,
UINT cchReturn,
HANDLE hwndCallback)

где:

  • lpszCommand - указывает на завершающуюся нулем строку с командой в следующей форме:
    [команда][устройство][параметры]
  • lpszReturnString - указывает на буфер для получения информации о результате. Если такая информация не нужна, то этот параметр устанавливается в NULL
  • cchReturn - этот параметр указывает размер в символах определенного предыдущим параметром буфера. Если он не нужен, то устанавливается в 0
  • hwndCallback - указывает на окно отклика "возврата", если в командной строке указан параметр 'notify'. Если 'notify' не указан, то этот параметр устанавливается в NULL.

Итак, функция возвращает 0 в случае удачи и, соответственно, код ошибки в противном лучае. С помощью кода ошибки можно получить дополнительную информацию. Это относится и к mciSendCommand()! Не путайте это с параметром lpszReturnString, он просто хранит информацию о том, какую работу выполняет данная функция.

Вот маленький примерчик: воспроизведение wave-файла.

#include "stdafx.h"
#include <mmsystem.h>

void main()
{
DWORD result = mciSendString("play c:\\windows\\media\\tada.wav wait", NULL, 0, NULL);
if (result)
printf("Ошибка");
}

Необходимо добавить библиотеку winmm.lib !!! Иначе "пролетите"!