Интерфейс управления устройствами 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 !!! Иначе "пролетите"!

Читайте также:
  • Работа с СУБД Oracle через интерфейс OCCI
    Принятые именования объектов Environment* env;Connection* conn;Statement* stmt;ResultSet* rs;SQLException &sqlExcp; Давайте рассмотрим пример небольшой тестовой программы использующей интерфейс OCCI:#include #include "occi.h"  using namespace std;using namespace oracle::occi;#defi...
  • Задача Майхилла для Microsoft Visual C++
    Алгоритм поведения и автоматная модель стрелка На первый окрик: "Кто идет?" - он стал шутить,На выстрел в воздух закричал: "Кончай дурить!"Я чуть замешкался и, не вступая в спор,Чинарик выплюнул - и выстрелил в упор.В. Высоцкий В задаче Майхилла необходимо определить, как нужно...
  • Использование ODBC в Visual C++
    Установка соединения Для работы необходимо включить описание функций, которые находятся в файле afxdb.h: // пример#include "afxdb.h" Для начала работы необходимо используя класс создать тект используя конструктор. В конструктор нет необходимости передавать параметры. После создания обье...
  • Создание простого приложения с плагинами
    Динамически подключаемые модули (DLL) - это модули, которые содержат функции и данные. Эти модули загружаются во время выполнения программы, использующей эти модули (хоста). В ОС Windows модули содержат внутренние и экспортируемые функции (в UNIX подобных системах все функции являются экспортируе...
  • Работа с 1C Предприятие из Visual C++
    1С Предприятие предоставляем пользователям механизм OLE DB. Если Вам вдруг захотелось использовать какие либо данные из 1С Предприятия в вашей программе – вы можете воспользоваться этим механизмом. Совсем просто это делается в таких языках, как Visual Basic или Delphi. В них вся работа с O...