让我们先来了解一下什么是MCI指令,MCI的全称是Media Control Interfase(媒体控制接口)。实际上MCI是一个高级的函数调用接口,我们可以把它看作是一个解释器,通过它,我们就可以直接和外部音频或视频设备打交道了。
mciSendString(MCI指令,返回文本,返回长度,句柄复查);
mciExecute(MCI指令,返回文本,返回长度,句柄复查);
mciGetErrorString(MCI指令,返回文本,返回长度,句柄复查)。
mciSendString函数的功能是传送指令字符串给MCI,mciExecute的功能和mciSendString一样,不同的是当发生错误时mciExecute会弹出对话框显示错误信息。mciGetErrorString的功能是将MCI错误代码转换为字符串。
MCI的Command命令,最重要的一个,可以执行各种操作
Open,Close,Play,Pause,Stop,Back,Step,Prev,Next,Seek,Record,Eject,Sound和Save
其格式如下:
[窗体.]MMControl.command=命令字符串。
Open:使用MCI_OPEN命令打开一个设备;所用的属性:Notify(False),Wait(True),Shareable,Devicetype,FileName。
Close:使用MCI_CLOSE命令关闭一个设备;所用的属性:Notify(False),Wait(True)。
Play:使用MCI_PLAY;所用的属性:Notify(True),Wait(False),From,To。
Pause:使用MCI_PLAY命令暂停播放或录制,设备处于暂停状态时,将用MCI_RESUME命令恢复播放或录制。属性:Nofity(False),Wait(True)。
Stop:使用MCI_STOP命令停止播放或录制。属性:Notify(False),Wait(True)。
Back:使用MCI_STEP倒退一定的步长。属性:Notify(False),Wait(True),Frames。
Step:使用MCI_STEP前进一定步长。属性:Notify(False),Wait(Ture),Frames。
Prev:用Seek命令退回到当前磁道的起始处,如果在执行Prev命令三秒中内再执行Prev命令则回到前一磁道的起始处。属性:Notify(False),Wait(True)。
Next:用Seek命令到下一磁道的起始处,如果当前是最后磁道,则回到最后磁道的起始处。属性:Notify(False),Wait(True)。
Seek:如果不处于播放状态,可用MCI_SEEK命令寻找一个位置。如果正在播放,则使用MCI_PLAY命令从寻找到的位置播放。属性:Notify(False),Wait(True)。
Record:使用MCI_RECORD命令录制。属性:Notify(False),Wait(True),To,RecordMode(0—Insert,1—Overwrite)。
Eeject:使用MCI_SET弹出媒体设备中的媒体。属性:Notify(False),Wait(True)。
Sound:使用MCI_SOUND播放声音。属性:Notify(False),Wait(False),FileName。
Save:使用MCI_SAVE命令保存文件。属性:Notify(False),Wait(True),FileName。
MCI的一些属性
1.Wait属性
用来指定多媒体MCI控制,在将控制权交还给应用程序前,是否先等待下一个MCI命令执行完毕。该属性取值中在执行下一个MCI命令时才有效。
False:多媒体MCI立刻将控制权交给应用程序,不管MCI命令是否完成。
True:多媒体MCI直到下一MCI命令执行完,才将控制权交给应用程序。
2.Notify属性
默认值为False,表示下一命令将不产生Done事件;若设为True则反之。
Done事件格式如下:Sub MMControl_Done(NotifyCode AS Long)
3.UpdateInterval属性
用来指定相邻状态更新事件间间隔的时间,单位为毫秒,格式如下:
[窗体.]MMControl_StatusUpdate()
4.DeviceType属性
用来指定要打开的MCI设备类型,其格式如下:
[窗体.]MMControl.DeviceType[=设备类型名]
可以用的设备类型名有:AVIVideo,CDAudio,DigitalVideo,MMMovie,Scanner,SequencerMIDI,VCR,Videodisc,WaveAudio等。当打开简单设备时(如:Audio CD等不需要文件的设备)必须设置该属性;如使用的是复合型MCI设备时(即文件的扩展名不能告诉你要使用的设备名)该属性也应当被设置。
5.TimeFormat属性
用来指定有关Position属性的时间表示格式,格式如下:
[窗体.]MMControl.TimeFormat[=类型]
6.RecordMode属性
用CanRecord属性测试一个设备是否支持录制功能后,你可以用该属性来指定MCI设备的录制模式。格式如下:
[窗体.]MMControl.RecordMode[=模式]
RecordMode属性取值为0表示是Insert录制模式;1是Overwrite模式;对WaveAudio设备来说它只支持Insert模式。
7.From,To属性
根据TimeFormat属性给定的时间表示方法来指定From(起始)To(终止)位置。
8.Shareable属性
用来指定是否可以由多个程序共享一个MCI设备,格式如下:
[窗体.]MMControl.Shareable[={True|False}]
9.Frames属性
用来指定Stop命令和Back命令步进或倒退的帧数,默认为1。
10.AutoEnable属性
可以决定多媒体MCI控制中各个按钮的有效或无效。如将其值设为True,则多媒体MCI控制命令根据当前的按钮状态来决定哪些按钮的MCI设备类型可用。格式如下:
[窗体.]MMControl.AutoEnable[={True|False}]
使用MCI控制的事件:
附录:
可以用的设备类型名有:AVIVideo,CDAudio,DigitalVideo,MMMovie,Scanner,SequencerMIDI,VCR,Videodisc,WaveAudio等
(AVI,MIDI,WAV,CD,DVD,VCR)
MCI的设备类型有两种 ,一是 简单设备,如 CD 、视盘演播器;二是复合设备(需要文件的设备,如数字视频及波形音频设备等。 如果需要通过 MCI 去控制设备,必须将相应的 MCI 驱动程序和设备的驱动程序(扩展名是 DRV )、 DLL 装入。 Windows 中的控制面板可完成 MCI 驱动程序的安装。在 Windows 中, WIN.INI 文件中的 [mci] 部分包括一个已安装了的设备类型表,如下所示。 [mci extensions] wav=waveaudio mid=Sequencer rmi=Sequencer avi=AVIVideo m1v=MpegVideo mpe=MpegVideo dat=MpegVideo1
/** 窗口句柄所指对象是否可播放 */
MCIWndCanPlay(hwnd)
/** 窗口句柄所指对象是否可录音 */
MCIWndCanRecord(hwnd)
/** 进行录音 */
MCIWndRecord(hwnd)
/** 关闭窗口句柄 */
MCIWndClose(hwnd)
/** 播放窗口句柄所指对象 */
MCIWndPlay(hwnd)
/** 停止播放窗口句柄所指对象 */
MCIWndStop(hwnd)
/** 暂停播放窗口句柄所指对象 */
MCIWndPause(hwnd)
/** 恢复(暂停)播放窗口句柄所指对象 */
MCIWndResume(hwnd)
/** 移动播放进度至指定位置 */
MCIWndSeek(hwnd, lPos)
/** 移动播放进度至初始位置 */
MCIWndHome(hwnd)
/** 移动播放进度至结束位置 */
MCIWndEnd(hwnd)
/** 倒退播放窗口句柄所指对象 */
MCIWndPlayReverse(hwnd)
/** 从指定位置播放窗口句柄所指对象 */
MCIWndPlayFrom(hwnd, lPos)
/** 播放窗口句柄所指对象直至指定位置 */
MCIWndPlayTo(hwnd, lPos)
/** 播放窗口句柄所指对象的指定区间 */
MCIWndPlayFromTo(hwnd, lStart, lEnd)
/** 获取当前的播放进度 */
MCIWndGetPosition(hwnd)
/** 获取窗口句柄所指对象文件的长度 */
MCIWndGetLength(hwnd)
/** 销毁窗口句柄 */
MCIWndDestroy(hwnd)
/** 设置播放音量 */
MCIWndSetVolume(hwnd,iVol)
/** 获取当前播放音量 */
MCIWndGetVolume(hwnd)
/** 设置播放速率 */
MCIWndSetSpeed(hwnd,iSpeed)
/** 获取播放速率 */
MCIWndGetSpeed(hwnd)
/** 设置是否循环播放 */
MCIWndSetRepeat(hwnd,f)
/** 获取是否循环播放 */
MCIWndGetRepeat(hwnd