Программирование на Visual Basic

Команды MCI на VB

Любой программист работающий с VB знаком с таким элементом управления, какMultimedia MCI (странное название, если учесть, что MCI - этосокращение от Multimedia Control Interace). Как и большинство других элементов, он инкапсулирует функции Windows API(конкретно библиотеки winmm.dll). Он удобен в обращении, но выполнен в виде внешней библиотеки, чтосоздаёт некоторые неудобства. Но мы можем всё изменить. Я, конечно, не планирую описывать все функции указанной выше библиотеки, остановлюсь на главных, открытии, воспроизведении, опросе состояния, установке некоторых параметров и закрытии.
Для работы нам понадобятся три API функции.

Private Declare Function mciExecute Lib "winmm.dll" (ByVal lpstrCommand As String) As Long
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" ( _
ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long

Private Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" ( _
ByVal dwError As Long, _
ByVal lpstrBuffer As String, _
ByVal uLength As Long) As Long


Кроме того нам понадобятся две функции "оболочки".

Public Function VBMCIGetErrorString(ByVal ErrorCode As Long) As String
Dim strTemp As String, lngLen As Long
strTemp = String$(128, 32): lngLen = 128
mciGetErrorString ErrorCode, strTemp, lngLen
VBMCIGetErrorString = Trim$(Left$(strTemp, lngLen))
End Function

Public Function VBMCISendString(ByVal strCommand As String) As String
Dim strTemp As String, lngLen As Long, lREs As Long
strTemp = String$(128, 0): lngLen = 128
lREs = mciSendString(strCommand, strTemp, lngLen, hWnd)
If lREs <> 0 Then
MsgBox VBMCIGetErrorString(lREs), vbCritical, "Multimedia Control Interface"
End If
VBMCISendString = Trim$(Left$(strTemp, lngLen))
End Function


Для работы можно использовать и mciExecute и VBMCISendString.Обе функции в случае ошибкивыводят информационное окно. Первая быстрее, так как API"шная, но вторая способна возвращать значение, что иногда бывает необходимо. Обе эти функциииспользуют строковые команды, которые мы сейчас разберём.
Все команлы записываются в виде <команда> <устройство> <параметр> <значение>... <флаги>. Устройством может бытьидентификатор устройства (vcr, sequencer, waveaudio, cdaudio и т.д.), имя файла или специальный псевдоним. Наличие параметров и флагов необязательно. Флаги могут быть: wait(функция ожидает зывершения программы), notify(отправляет родительскому окну сообщение WM_NOTIFY). Я не буду разбирать функции и параметры для отдельных устройств, а толькооБщие для всех.
Команды MCI
КомандаОписание
openоткрывает устройство.
alias <псевдоним_устройства> - этот параметр задаёт псевдоним для открывакмого устройства.
type тип_устройства - тип открываемого устройства.
shareable - инициализирует устройство, как общее. Если открывемое устройство не было инициализировано как общее, возникнет ошибка(неподходящее устройство).
playпроигрывает устройство.
from <начальная_позиция> - задаёт начальную позицию проигрывания.
to <конечная_позиция> - задаёт конечную позицицю проигрывания.
fullscreen (только для сжатых видео файлов) - задаёт режим воспроизведения во весь экран.
pauseприостанавливает воспроизведение.
stopостанавливает воспроизведение устройства.
resumeпродолжает воспроизведение приостановленное командой pause.
close Закрывает устройство.
statusОпределяет состояние устройства.В этом случае необхожимо использовать VBMCISendString.
length - возвращает длину записи в текущем формате.
position - возвращает позицию в текущем формате.
length track <номер> - возврашает длину трэка, в единицах времени или кадрах.
position track <номер> - возвращает позицию воспроизведения для трэка.
position start - возвращает начальную позицию воспроизведения устройства.
time format - возвращает текущий формат времени.
seekустанавливает текущую позицию воспроизведения устройтсва.
to <позция> - делает позицию текущей.
to end - перемещает позицию в конец.to start - перемещает позиуию в начало
setустанавливает параметры устройства.
time format <формат_времени> - устанавливает формат определения времени. Формат может быть:
hms - hh:mm:ss
milliseconds - милисекунды.
msf - min:sec:frames.
на этом значения формата не ограничивается, каждое устройство имеет свой формат времени. Здесь приведены общие(самый общий - milliseconds).
Также каждое устройство обладает собствееными параметрами.
capabilityопределяет возможности устройства.В данном случае полезно использовать mciExecute, так как возвращаютсяцелочисленные значения. Ненулевое значение обозначает наличие определённой способности.
can eject - определяет возможность выброса носителя.
can play - определяет возможность воспроиведения.
can record - определяет возможность записи.
can save - определяет возможность сохранения в отделбный файл.
has video - определяет наличие видео для воспроизведения.
has audio - определяет наличие аудио записи.
Я привёл Вам минимальный список команд MCI необходимых для работы с устройствами. Он далеко не полон. Если Васинтересует эта тема, рекомендую почитать справочные файлы к C++ и Delphi.

Hosted by uCoz