Мультимедиа для Windows© Александр Фролов, Григорий ФроловТом 15, М.: Диалог-МИФИ, 1994, 284 стр. 2.2. Интерфейс управляющих строк MCIMCI представляет собой универсальный, независимый от особенностей аппаратного обеспечения интерфейс, предназначенный для управления устройствами мультимедиа, такими как звуковые и видеоадаптеры, устройства чтения (проигрывания) звуковых компакт-дисков и лазерных видеодисков. В большинстве случаев возможности, предоставляемые этим интерфейсом, удовлетворят потребности любого приложения мультимедиа, предназначенного для записи и воспроизведения звуковой или видеоинформации. Если же приложение должно обрабатывать данные на низком уровне или в реальном времени (задачи редактирования и преобразования wav-файлов, распознавания речи, образов, преобразования речи в реальном времени), оно может воспользоваться низкоуровневым интерфейсом, который мы рассмотрим позже. Все функции интерфейса MCI экспортируются библиотекой mmsystem.dll . Эти функции обращаются непосредственно к драйверам устройств ввода/вывода, а также к функциям более низкого уровня, определенным в библиотеке mmsystem.dll. Приложения могут использовать два типа программного интерфейса MCI . Первый тип называется интерфейс управляющих строк (Command-String Interface ). Он основан на использовании текстовых команд (таких, как open, play, close). Второй тип - это интерфейс управляющих сообщений (Command-Message Interface ). Для управления устройствам посылаются сообщения, коды которых определены в файле mmsystem.h через символические константы (например, MCI_OPEN, MCI_PLAY, MCI_CLOSE). Интерфейс управляющих строк удобен для использования в системах программирования высокого уровня, так как позволяет быстро получить необходимый результат. Например, для проигрывания звукового файла ding.wav достаточно передать звуковому адаптеру следующую последовательность управляющих строк: open ding.wav type waveaudio alias snd wait play snd wait close snd Не намного сложнее выглядят управляющие строки (команды) для записи звукового фрагмента в wav-файл или для проигрывания видеофрагмента из avi-файла. Для передачи команд используется функция mciSendString , которой в качестве первого параметра передается указатель на строку команды. Однако более простое и тесное взаимодействие между приложением, составленным на языке программирования С, и устройством мультимедиа можно достичь при использовании интерфейса управляющих сообщений. Для посылки такого управляющего сообщения приложение должно вызвать функцию mciSendCommand . Второй параметр этой функции содержит код управляющего сообщения. Мы рассмотрим основные приемы использования обоих типов интерфейса MCI на примере работы со звуковым адаптером и wav-файлами. В дальнейшем, при описании работы с устройствами других типов, мы ограничимся только особенностями команд MCI этих устройств. Использование интерфейса управляющих строкРабота с устройствами ввода/вывода системы мультимедиа напоминает работу с обычными файлами в том смысле, что вначале вы открываете устройство, затем выполняете с ним те или иные операции, затем закрываете устройство. Прежде чем работать с устройством средствами MCI, его следует открыть при помощи команды open. Далее при необходимости можно задать режим работы устройства, послав ему команду set с параметрами. Для включения режима проигрывания или записи используются, соответственно, команды play и record . В любой момент времени можно узнать состояние устройства, если послать ему команду status . После использования устройства его необходимо закрыть при помощи команды close . Команды MCIКакие бывают команды? Все команды можно разделить на четыре группы : системные (System), обязательные (Required), базовые (Basic) и расширенные (Extended). Системные команды не передаются драйверу устройства, они обрабатываются непосредственно системой MCI. Обязательные команды поддерживаются любыми устройствами. Примером таких команд могут послужить строки open и close . Некоторые из базовых команд могут не поддерживаться устройством. Например, устройство может только проигрывать дорожки звукового компакт-диска, но не записывать их. И, наконец, расширенные команды, которые дополняют возможности базовых команд, могут поддерживаться только некоторыми типами устройств. Приведем список команд, которые используются для управления звуковым адаптером.
Далее мы расскажем об использовании этих команд применительно к звуковому адаптеру. Особенности других устройств мультимедиа будут рассмотрены позже. Функция mciSendStringКак передать устройству управляющую строку? Очень просто - для этого можно воспользоваться функцией mciSendString . Прототип функции mciSendString находится в файле mmsystem.h: Функция mciSendString DWORD mciSendString( LPCSTR lpstrCommand, // управляющая строка LPSTR lpstrReturnString, // буфер для результата UINT wReturnLength, // размер буфера HANDLE hCallback) // идентификатор окна извещения Параметры функции: lpstrCommand Дальний указатель на текстовую управляющую строку lpstrReturnString Указатель на буфер, в который будет записан результат выполнения команды (в текстовом виде). Этот параметр можно указать как NULL, если приложение не интересуется результатом выполнения команды wReturnLength Размер буфера для записи результата выполнения команды hCallback Идентификатор окна, которое получит извещение (сообщение MM_MCINOTIFY) после того как устройство завершит операцию. Этот параметр можно указать как NULL, если извещение не используется Возвращаемое значение: Нуль при успешном завершении или код ошибки (в младшем слове возвращаемого значения): MCIERR_BAD_CONSTANT Указана константа, неправильная для данной команды MCIERR_BAD_INTEGER Указано значение, неправильное для данной команды MCIERR_DUPLICATE_FLAGS Двойное определение параметра или значения MCIERR_MISSING_COMMAND_STRING Не указана управляющая строка MCIERR_MISSING_DEVICE_NAME Не указано имя устройства, драйвера, файла или алиас MCIERR_MISSING_STRING_ARGUMENT Не указан обязательный параметр команды MCIERR_NEW_REQUIRED_ALIAS При использовании параметра new следует указать алиас MCIERR_NO_CLOSING_QUOTE В команде отсутствуют закрывающие двойные кавычки MCIERR_NOTIFY_ON_AUTO_OPEN Для устройств, открываемых автоматически, нельзя указывать флаг notify (флаг notify указывает на необходимость генерации извещающего сообщения при завершении выполнения операции, мы расскажем об этом флаге позже) MCIERR_PARAM_OVERFLOW Строка параметров не помещается в буфер. Необходимо увеличить размер буфера MCIERR_PARSER_INTERNAL Ошибка в драйвере устройства. Следует заменить драйвер на новый, более поздней версии MCIERR_UNRECOGNIZED_KEYWORD Драйвер не распознал параметр управляющей строки Например, для проигрывания wav-файла вы можете использовать следующую последовательность вызовов функции mciSendString : mciSendString( (LPSTR)"open ding.wav type waveaudio alias snd wait", (LPSTR)szBuf, 256, NULL); mciSendString((LPSTR)"play snd wait", (LPSTR)szBuf, 256, NULL); mciSendString((LPSTR)"close snd", (LPSTR)szBuf, 256, NULL); Для преобразования кода ошибки, полученного от функции mciSendString, в текстовую строку, можно воспользоваться функцией mciGetErrorString , которой необходимо передать двойное слово кода ошибки. Функция mciGetErrorString UINT mciGetErrorString( DWORD dwError, // код ошибки LPSTR lpstrBuffer, // буфер для записи текстовой строки UINT wLength); // размер буфера Параметры функции: dwError Код ошибки, полученный от функции mciSendString или mciSendCommand (функция mciSendCommand предназначена для передачи управляющих сообщений, она будет рассмотрена позже) lpstrBuffer Буфер, в который будет записано текстовое описание ошибки wLength Размер буфера в байтах Возвращаемое значение: TRUE при успешном завершении или FALSE, если переданному коду ошибки не соответствует ни одно текстовое описание Сообщение MM_MCINOTIFYНемного о сообщении MM_MCINOTIFY . Как мы уже говорили, приложение может передать функции mciSendString через последний параметр идентификатор окна. Если команда MCI выдана с параметром notify, после ее завершения функция окна получит сообщение MM_MCINOTIFY. Это сообщение - извещение о завершении (удачном или нет) процесса выполнения команды. Через параметр wParam сообщения MM_MCINOTIFY функция окна получает код извещения, по которому можно судить о результатах выполнения команды. Возможны следующие значения (описанные в файле mmsystem.h):
Параметр lParam содержит идентификатор устройства, приславшего извещение. В случае успешного завершения обработчик сообщения MM_MCINOTIFY должен вернуть нулевое значение, при ошибке - соответствующий код ошибки MCI. Далее мы перейдем к изучению отдельных групп команд, предназначенных для работы со звуковым адаптером. Команды инициализации и завершения работыВ этой группе всего две команды - open и close, предназначенные, соответственно, для открытия и закрытия устройства ввода/вывода звука. openУправляющая строка open посылается перед началом работы для открытия устройства. Эта строка имеет следующий формат: open device [type device_name] [alias alias] [buffer size] [notify] [wait] Параметры, указанные в квадратных скобках, необязательные. В качестве параметра device можно указывать имя драйвера устройства, имя самого устройства или имя звукового файла (можно также указать полный путь к файлу). Так как имя драйвера зависит от устройства, лучше пользоваться именем устройства или именем файла. Для звукового адаптера можно указать устройство waveaudio : open waveaudio Это устройство обслуживается драйвером mciwave.drv, входящим в состав операционной системы Windows 3.1. Интерфейс управляющих строк MCI непригоден для работы с драйвером Sound Driver for PC Speaker , поэтому, если в системе установлен только такой драйвер, пользуйтесь функциями MessageBeep или sndPlaySound, рассмотренными нами ранее. Если при открытии устройства указывается путь к файлу, тип устройства определяется по расширению имени с использованием раздела [mci extensions] файла win.ini: [mci extensions] wav=waveaudio mid=sequencer rmi=sequencer avi=AVIVideo Поэтому следующая командная строка приведет к открытию устройства waveaudio: open c:\wave\bye.wav Если через параметр device передается имя файла, можно указать тип устройства при помощи параметра type device_name. Например: open c:\wave\bye.wav type waveaudio Это позволит использовать имена файлов с нестандартными расширениями. Например, вы можете переименовать файл bye.wav в файл bye.snd, при этом несмотря на то, что в разделе [mci extensions] файла win.ini расширение snd не описано, результат выполнения следующей команды будет правильный: open c:\wave\bye.snd type waveaudio Вы можете также указать алиас (альтернативное имя) для работы с устройством, использовав параметр alias: open c:\wave\bye.wav alias sound Параметр buffersize size задает размер буфера, который используется драйвером звукового адаптера (в секундах звучания). Если указан параметр notify, и при передаче строки в последнем параметре функции mciSendString был указан идентификатор окна для оповещения, после того как устройство будет открыто, функция этого окна получит сообщение MM_MCINOTIFY. С помощью команды open можно открыть устройство не только на воспроизведение, но и на запись. При этом в качестве параметра device нужно указать строку new. Следует также указать алиас. В качестве примера приведем последовательность команд, выполняющих запись: open new type waveaudio alias nsound wait record nsound Для остановки записи следует выдать команду stop. Для сохранения записанного фрагмента в wav-файле нужно использовать команду save (команда close закрывает устройство, она будет описана ниже): stop nsound wait save nsound newsound.wav wait close nsound Если указан параметр wait, функция mciSendString вернет управление только после завершения операции. Заметим, что параметры notify и wait используются практически со всеми управляющими строками. closeКоманда close закрывает устройство и освобождает все связанные с ним ресурсы. Формат команды: close device_id [notify] [wait] Необходимо указать идентификатор устройства device_id, использованный при открытии устройства командой open. Например, для того чтобы закрыть устройство с алиасом nsound, вы можете использовать следующую управляющую строку: close nsound Справочные командыЭта группа команд предназначена для получения различной справочной информации об устройстве. Перед использованием справочных команд следует открыть устройство командой open. sysinfoКоманда sysinfo предназначена для получения системной информации об MCI-устройстве: sysinfo device_id parameter [notify] [wait] В качестве параметра parameter можно указывать одну из следующих строк: installname Имя, использованное в файле system.ini при установке драйвера устройства quantity Количество MCI-устройств типа device_id, установленных в системе и указанных в файле system.ini. Если в качестве device_id указать строку all, будет подсчитано общее количество установленных в системе MCI-драйверов quantity open Количество открытых MCI-устройств типа device_id, установленных в системе и указанных в файле system.ini name index Имя устройства MCI, номер которого задан строкой index. Первому устройству соответствует строка 1 name index open Имя открытого устройства MCI, номер которого задан строкой index infoС помощью команды info можно получить информацию об MCI-устройстве: info device_id parameter [notify] [wait] В качестве параметра parameter можно указывать одну из следующих строк: product Текстовое описание звукового адаптера input Текстовое описание устройства ввода звуковой информации output Текстовое описание устройства вывода звуковой информации file Имя текущего wav-файла capabilityС помощью команды capability приложение может определить возможности устройства: capability device_id parameter [notify] [wait] В качестве параметра parameter можно указывать одну из следующих строк: can play Если драйвер звукового адаптера может проигрывать wav-файлы, в ответ на эту строку он возвратит строку true, а если нет - то false can record Если устройство может записывать, возвращается true, в противном случае - false can save Используется для определения возможности сохранения записанного звукового фрагмента в wav-файле. Если такая возможность есть, возвращается строка true, в противном случае - false compound device Все MCI-устройства можно разделить на простые и составные (compound). Простые устройства, такие как проигрыватель звуковых компакт-дисков или лазерных видеодисков, не работают с файлами. Составные, такие как звуковой адаптер, используют файлы. Поэтому в ответ на эту строку, переданную драйверу звукового адаптера, приложение получит строку true device type Для звукового адаптера возвращается строка waveaudio has audio Для звукового адаптера возвращается строка true inputs Общее количество устройств ввода outputs Общее количество устройств вывода uses files Для звукового адаптера возвращается строка true, так как он работает с wav-файлами statusКоманда status позволяет определить текущее состояние устройства. status device_id parameter [notify] [wait] В качестве параметра parameter можно указывать одну из следующих строк: alignment Выравнивание блока данных в байтах bitspersample Количество байт на одну выборку сигнала bytespersec Скорость проигрывания или записи, байт в секунду channels Количество каналов, 1 - моно, 2 - стерео current track Номер текущей дорожки. Для звукового адаптера всегда равно 1 format tag Тег формата input Устройство ввода length Общая длина звукового фрагмента length track track_number Длина фрагмента, соответствующая заданной дорожке level Текущий уровень звукового сигнала media present Признак присутствия носителя (среды). Для звукового адаптера всегда равно true mode Текущий режим работы: not ready (не готов), playing (проигрывание), stopped (останов), recording (запись), seeking (позиционирование) number of tracks Количество дорожек. Для звукового адаптера всегда равно 1 output Устройство вывода position Текущая позиция position track track_number Текущая позиция на заданной дорожке. Для звукового адаптера всегда равно 0 ready Если устройство готово, возвращается строка true samplespersec Количество выборок сигнала в секунду при проигрывании или записи (частота дискретизации) start position Начальная позиция time format Текущий формат времени Команды установки режима работыВ этой группе есть две команды - set и break. setКоманда set в зависимости от параметров позволяет выполнять установку различных режимов работы. set device_id parameter [notify] [wait] В качестве параметра parameter можно указывать одну из следующих строк (за один раз можно указывать сразу несколько параметров): alignment int Установка выравнивания блока данных относительно начала данных звукового фрагмента, переданного драйверу звукового адаптера any input Использование любого устройства ввода, поддерживающего текущий формат при записи. Этот режим включен по умолчанию any output Использование любого устройства вывода, поддерживающего текущий формат при воспроизведении. Этот режим включен по умолчанию audio all off Отключение звукового выхода audio all on Включение звукового выхода audio left off Отключение левого канала audio left on Включение левого канала audio right off Отключение правого канала audio right on Включение правого канала bitspersample bit_count Установка количества бит для представления выборки сигнала. Параметр bit_count задает количество бит (8 или 16) bytespersec byte_rate Установка частоты дискретизации при записи или воспроизведении. Параметр byte_rate задает частоту (байты в секунду) channels channel_count Установка количества каналов для записи или воспроизведения (1 - монофонический режим, 2 - стереофонический режим) format tag tag Установка типа формата format tag pcm Установка формата PCM (импульсно-кодовая модуляция) input int Выбор канала для ввода output int Выбор канала для вывода samplepersec int Установка скорости записи или воспроизведения time format bytes В качестве единицы измерения при позиционировании используются байты блока звуковых данных time format milliseconds В качестве единицы измерения при позиционировании используются миллисекунды. Строку milliseconds можно также указывать как ms time format samples В качестве единицы измерения при позиционировании используются выборки сигнала breakКоманда break позволяет определить код виртуальной клавиши, предназначенной для прерывания (по умолчанию используется комбинация клавиш <Control+Break>): break device_id parameter [notify] [wait] В качестве параметра parameter можно указывать одну из следующих строк: on virt_key Для прерывания будет использована клавиша с виртуальным кодом virt_key off Действие клавиши прерывания отменяется Если команда выдана с параметром wait, функция mciSendString вернет управление только после завершения операции. Если пользователь не желает дожидаться завершения длительной операции, он может нажать клавишу, прерывающую выполнение команды. Команды для воспроизведения, записи и позиционированияС помощью команд этой группы можно выполнять запуск воспроизведения или записи, временный или полный останов, позиционирование и т. д. playКоманда play предназначена для запуска процесса воспроизведения. Она имеет следующий формат: play device_id [from position [to position]] [notify] [wait] Идентификатор устройства device_id создается при открытии устройства командой open. Например, если для открытия устройства была использована строка open c:\windows\ding.wav alias ding то в качестве параметра device_id можно использовать алиас ding: play ding Если не указан параметр from position, проигрывание начинается с текущей позиции. Сразу после открытия текущая позиция устанавливается в начало файла. Параметр to position позволяет указать конечную позицию, при достижении которой проигрывание прекращается. Перед использованием параметров from и to необходимо установить формат для позиционирования при помощи команды set (см. ниже). Если задан параметр notify, и при передаче строки в последнем параметре функции mciSendString был указан идентификатор окна для оповещения, после завершения операции проигрывания функция этого окна получит сообщение MM_MCINOTIFY. Обработчик этого сообщения может закрыть устройство или выполнить повторное проигрывание фрагмента, например, с самого начала. Указав параметр wait, можно установить псевдосинхронный режим воспроизведения. В этом случае функция mciSendString вернет управление только после завершения операции, однако работа других приложений Windows будет продолжаться во время воспроизведения. Если же этот параметр не указан, функция mciSendString запустит процесс в асинхронном режиме и немедленно вернет управление. recordЭта команда запускает запись звукового фрагмента. В качестве необязательного параметра parameter можно указывать одну из следующих строк: insert Новые данные будут добавлены к ранее записанным from position Определение начальной позиции для записи. Если начальная позиция не задана, данные будут вставлены начиная с текущей позиции. Если используются параметры from или to, необходимо задать формат времени командой set time format to position Определение конечной позиции при записи. Если конечная позиция не задана, запись будет продолжаться до тех пор, пока не будет выдана команда stop или pause overwrite Новые данные должны заместить записанные ранее saveСохранение записанного звукового фрагмента в файле save device_id [filename] [notify] [wait] Параметр filename задает путь к файлу, в который должен быть записан звуковой фрагмент pauseВременный останов при воспроизведении или записи (пауза) pause device_id resumeПродолжение воспроизведения или записи после временного останова по команде pause. resume device_id [notify] [wait] seekПозиционирование с последующим остановом. Перед использованием этой команды необходимо задать формат времени командой set time format. seek device_id parameter [notify] [wait] В качестве необязательного параметра parameter можно указывать одну из следующих строк: to position Позиционирование в указанное место фрагмента to start Позиционирование в начало to end Позиционирование в конец cueПодготовка для записи или воспроизведения. После выполнения такой подготовки устройство будет готово быстро приступить к выполнению требуемой операции. Эту команду нельзя выдавать во время записи или воспроизведения. В качестве параметра parameter можно указывать одну из следующих строк: input Подготовка для записи output Подготовка для воспроизведения deleteУдаление сегмента из фрагмента звуковых данных delete device_id from position [to position] [notify] [wait] Для этой команды можно указать либо оба параметра (from и to), либо только параметр from. Приложение MCISTRVWПриложение MCISTRVW (листинг 2.4) демонстрирует использование строчного интерфейса MCI для воспроизведения звукового файла с именем kaas.wav, расположенного в текущем каталоге (файл kaas.wav есть в каталоге mcistrvw на дискете, которая продается вместе с книгой). Это простейшее приложение не создает ни одного окна и, следовательно, не обрабатывает сообщения. Листинг 2.4. Файл mcistrvw\mcistrvw.cpp // ----------------------------------------------------- // Приложение MCISTRVW // Демонстрирует использование командных строк MCI // ----------------------------------------------------- #define STRICT #include <windows.h> #include <mmsystem.h> void mciwioError(DWORD dwrc); #pragma argsused int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { DWORD dwrc; BYTE szBuf[256], szBuf1[256]; // Открываем файл kaas.wav dwrc = mciSendString( (LPSTR)"open kaas.wav type waveaudio alias patr wait", (LPSTR)szBuf, 256, NULL); if(dwrc) mciwioError(dwrc); // Получаем имя устройства, под которым оно установлено // в файле system.ini dwrc = mciSendString((LPSTR)"sysinfo patr installname wait", (LPSTR)szBuf, 256, NULL); if(dwrc) mciwioError(dwrc); lstrcat(szBuf, (LPSTR)"\n"); // Добавляем к нему текстовое описание аппаратуры dwrc = mciSendString((LPSTR)"info patr product wait", (LPSTR)szBuf1, 256, NULL); if(dwrc) mciwioError(dwrc); lstrcat(szBuf, szBuf1); // Выводим на экран полученную информацию об устройстве MessageBox(NULL, szBuf, "MCISTRWV", MB_ICONINFORMATION); // Запускаем проигрывание в синхронном режиме dwrc = mciSendString((LPSTR)"play patr wait", (LPSTR)szBuf, 256, NULL); if(dwrc) mciwioError(dwrc); // После завершения проигрывания закрываем устройство dwrc = mciSendString((LPSTR)"close patr", (LPSTR)szBuf, 256, NULL); if(dwrc) mciwioError(dwrc); return 0; } // ----------------------------------------------------- // Функция mciwioError // Выводит текстовое описание ошибки // ----------------------------------------------------- void mciwioError(DWORD dwrc) { BYTE szBuf[MAXERRORLENGTH]; // Если коду ошибки, переданному через параметр dwrc // соответствует текстовое описание, выводим его на экран if(mciGetErrorString(dwrc, (LPSTR)szBuf, MAXERRORLENGTH)) MessageBox(NULL, szBuf, "MCISTRVW Error", MB_ICONEXCLAMATION); // В противном случае выводим сообщение о том, что это // неизвестная ошибка else MessageBox(NULL, "Неизвестная ошибка", "MCISTRVW Error", MB_ICONEXCLAMATION); } Сразу после запуска приложение открывает устройство waveaudio с файлом kaas.wav, передавая ему следующую команду: open kaas.wav type waveaudio alias patr wait При этом устройству назначается алиас patr. Так как задан параметр wait, работа приложения будет продолжена только после завершения процесса открытия. После открытия устройства приложение получает от него некоторую справочную информацию, и затем выводит ее на экран с помощью функции MessageBox. Для проигрывания выдается следующая команда (используется алиас, назначенный при открытии устройства): play patr wait Работа приложения MCISTRVW приостанавливается до завершения процесса воспроизведения, однако при этом другие приложения могут работать. Перед завершением своей работы приложение закрывает устройство: close patr Каждый раз после выдачи команды приложение проверяет код возврата функции mciSendString. Если он не равен нулю, вызывается обработчик ошибок (функция mciwioError), задача которого заключается в выводе текстового описания ошибки на экран. Для преобразования кода ошибки в текстовое сообщение используется функция mciGetErrorString. Файл ресурсов приложения MCISTRVW приведен в листинге 2.5. Листинг 2.5. Файл mcistrvw\mcistrvw.def APPICON ICON "mcistrwv.ico" Файл определения модуля вы сможете найти в листинге 2.6. Листинг 2.6. Файл mcistrvw\mcistrvw.def NAME MCISTRVW DESCRIPTION 'Приложение MCISTRVW, (C) 1994, Frolov A.V.' EXETYPE windows STUB 'winstub.exe' STACKSIZE 8120 HEAPSIZE 1024 CODE preload moveable discardable DATA preload moveable multiple Приложение MCITESTВ составе системы разработки приложений Microsoft SDK в качестве примера поставляются исходные тексты приложения MCITEST (загрузочный модуль этого приложения есть в каталоге SDK\MCITEST на дискете, которая продается вместе с книгой). Приложение MCITEST (рис. 2.1) удобно использовать для изучения строчного интерфейса MCI и для отладки последовательностей строчных команд MCI.
Рис. 2.1. Главное окно приложения MCITEST Окно, расположенное в верхней части экрана, предназначено для ввода командных строк. Это окно представляет собой многострочный редактор текста, поэтому вы можете вводить сразу несколько строк. Введенные команды можно выполнять по отдельности, нажимая клавишу <Enter> или кнопку "Step", или все вместе (при помощи кнопки "Go!"). В окне "MCI Output" отображается результат выполнения операции. Если произошла ошибка, ее текстовое описание появляется в окне "Error". Если в качестве одного из параметров команды была указана строка notyfy, в окне "Notification" отображается результат, переданный с сообщением MM_MCINOTIFY. С помощью меню "File" вы можете сохранять и загружать последовательности команд MCI, проверяя их в работе. |