MCI Command String总览.docx
- 文档编号:23009538
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:28
- 大小:31.97KB
MCI Command String总览.docx
《MCI Command String总览.docx》由会员分享,可在线阅读,更多相关《MCI Command String总览.docx(28页珍藏版)》请在冰豆网上搜索。
MCICommandString总览
MCICommandString总览—完全参数篇
(注:
本文以2000年七月的MSDN解释为准)
(由于小弟在MCI指令方面的认识有限,本文误解、疏漏甚至错误之处在所难免,请朋友们不吝指正。
小弟的信箱是gangaro@)
MCICommandString是多媒体设备的程序接口。
通过它,我们可以打开一个多媒体文件,例如mp3,VCD,Mpeg4格式的文件等等,并对它进行播放,暂停,关闭等操作。
现在小弟有幸给大家介绍一下MCICommandString的使用方法。
MCICommandString是通过mciExecute或mciSendString两个函数执行的。
这两个函数的声明如下:
PrivateDeclareFunctionmciExecuteLib"winmm.dll"Alias"mciExecute"(ByVallpstrCommandAsString)AsLong
PrivateDeclareFunctionmciSendStringLib"winmm.dll"Alias"mciSendStringA"(ByVallpstrCommandAsString,ByVallpstrReturnStringAsString,ByValuReturnLengthAsLong,ByValhwndCallbackAsLong)AsLong
这两个函数都有一个叫lpstrCommand的参数,这个参数就是我们今天要介绍的MCICommandString。
其中函数mciSendString还有三个参数,lpstrReturnString是一个字符串,它用来接收mciSendString函数返回的信息(例如,我们在lpstrCommand中的命令是让函数返回打开的文件的设备类型,那么函数就把设备类型的信息保存在lpstrReturnString参数中。
);uReturnLength参数用来指定参数lpstrReturnString的长度;hwndCallback是接收“wait”、“notify”消息的窗口句柄,在VisualBasic中调用时该参数设为0即可。
如果命令执行出错,函数mciExecute会直接弹出一个对话框,提示出错的原因。
而mciSendString函数会返回一个ErrorCode(错误代码),该代码的具体含义您可以参考MSDN中的目录“PlatformSDK\GraphicsandMultimediaServices\WindowsMultimedia\MultimediaReference\MultimediaConstants\MCIERRReturnValues”。
您可以根据具体情况选择到底使用哪一个函数来执行MCI命令。
例如,在调试的时候使用mciExecute,以便快速地获得错误原因,而在将要发布的程序中使用mciSendString函数,让程序中已设置的错误陷阱去处理错误,以避免频繁的错误提示而使用户觉得厌烦。
(对于有返回值的MCI命令,必须使用mciSendString函数。
)
在熟悉了这两个函数后,我们就可以进入正题――MCICommandString了。
MCICommandString的命令格式是这样的:
lpszCommandlpszDevicelpszCommandFlaglpazFlag
lpszCommand是mci命令,例如open,play,stop,close等等。
lpszDevice是设备名(或文件名)。
例如,我们用以下的程序打开了我的文档中的Music01.dat文件,并用“alias”参数将其别名设为OpenFile:
dimlReturnaslong
(1)
lReturn=mciExecute(“openC:
\Mydocu~1\Music01.dataliasOpenFiletypeMPEGVideo”)
(2)
那么,在以后的MCICommandString中lpszDevice参数必须指定为OpenFile。
例如,关闭该文件的代码如下:
lReturn=mciExecute(“closeOpenFile”)(3)
如果我们没有为打开的文件设定别名,则以后调用的MCICommandString中lpszDevice参数为DOS路径名加文件名。
例子如下:
dimlReturnaslong(4)
lReturn=mciExecute(“openC:
\Mydocu~1\Music01.dattypeMPEGVideo”)(5)
lReturn=mciExecute(“closeC:
\Mydocu~1\Music01.dattypeMPEGVideo”)(6)
从这里可以看出,设定别名的好处是减少了代码的输入。
LpszCommandFlag是mci命令的参数。
如上代码
(2),“aliasOpenFile”以及“typeMPEGVideo”就是命令“open”的参数。
通常一个mci命令的参数少则几个多则几十个。
LpazFlag可以为指定为“wait”或“notity”。
如果为“wait”,那么mci命令执行完毕后会向父窗体发送MCI_WAIT消息,“notity”则发送MCI_NOTIFY消息。
此参数在VisualBasic中无甚用处。
在此先声明一下,微软提供的winmm.dll函数库支持的多媒体设备的类型共有cdaudio,dat,digitalvideo,other,overlay,scanner,sequencer,vcr,videodisc,waveaudio十种(注意:
winmm.dll函数库不支持RealPlay格式的文件。
您可以用以下代码获得已打开的文件的类型:
lReturn=mciSendString(“capabilitylpszDevicedevicetype”,sReturn,32,0))。
至于哪一类设备支持哪些参数,您可以在MSDN中查找关键字“MCICommandStrings”,选中所列出的命令,在其中的HTML帮助文档中通常会有一个表格告诉你哪些设备支持哪些参数或者在第一段中有信息告诉您哪些设备支持该命令。
好了,现在让我们对又繁索,又该死,又强大的mci命令参数作一个系统的介绍。
(限于篇幅,本文仅介绍大部份主要命令的参数。
)
open:
该命令用来打开一个多媒体文件。
所有的设备都支持这个命令。
在任何mci命令执行前,都必须先使用该命令打开多媒体文件,以初始化设备。
该命令的几个参数意义如下:
aliasdevice_alias――指定欲打开文件的别名;shareable――是否以共享方式打开,如果不指定该参数,则以不共享的方式打开,也就是说,打开某一个多媒体文件后,其它程序不能再打开它,如果指定该参数,则以共享方式打开;typedevice_type――指定该文件在Windows中注册的多媒体文件名(注:
Windows中注册的多媒体文件名与设备类型名并不相同,设备类型只有以上所说的十种类型。
RealPlay格式的音视频流是第三方公司开发的媒体类型,不属于MicrosoftWindows支持的设备。
而Windows中注册的多媒体文件名请查看C:
\Windows\win.ini文件的[mciextensions]小节。
),如MPEGVideo,AVIVideo,waveaudio等,MPEGVideo、AVIVideo类型的文件其实都属于设备digitalvideo。
对于open命令,有几个须注意的方面。
首先,用open命令打开一个文件时,文件的路径必须是DOS格式的短路径。
您可以用API函数GetShortPathName返回某路径的该格式。
对于参数typedevice_type,复合型设备的文件(如:
MPEGVideo)mci设备会自动根据其在Windows中注册的扩展名(要想获得某扩展名的文件在Windows中注册的类型名,请查看C:
\Windows\win.ini文件的[mciextensions]小节。
)设置该参数(所以对于C:
\Windows\win.ini文件的[mciextensions]小节中已列的扩展名,不必指定该参数),但如果设备无法根据其扩展名获得文件的类型的话,就必须指定该参数,如果不指定则会提示:
“这不是已注册的mci设备“,而简单型设备(如CD音轨设备,可编程控制的录放像机,可编程控制的镭射影碟机)则不必指定该参数。
如果该命令被成功执行,那么返回值为0。
至此,您就可以用alias指定的别名执行各种各样的mci命令了。
(注意:
以下命令所能实现的功能虽然很令人激动,但是通常您打开的文件支持的命令没有几个。
)
(限于篇幅,每个命令具体的参数与MCI设备的支持情况请参照MSDN。
在此恕不列出。
)
(参数中的黑体字表示这是一个MCI命令,斜体字表示该单词所表示的是MCI参数的变量,必须由开发者指定。
)
Break:
指定一个键来退出使用wait参数的当前mci命令。
这是一个MCI系统命令,所有MCI设备都支持这个命令。
onvirtual_key_code:
指定一个键用来退出含有wait参数的命令
off:
使当前break键无效
Capability:
获得已打开的设备的功能,比如能否播放,能否退出,能否记录等等。
所有MCI设备都支持这个命令。
candetectlength:
如果设备能侦测长度则返回TRUE
caneject:
如果设备能弹出则返回TRUE
canfreeze:
如果设备支持冻结数据则返回TRUE
canlock:
如果设备支持锁定数据则返回TRUE
canmonitorsources:
如果设备能将一个输入源输出到指定的输出源则返回TRUE,与当前的输入源无关
canplay:
如果设备能播放则返回TRUE
canpreroll:
如果设备在cue命令中支持preroll参数则返回TRUE
canpreview:
如果设备能向前快放则返回TRUE
canrecord:
如果设备支持记录则返回TRUE
canreverse:
如果设备能后退则返回TRUE
cansave:
如果设备能保存数据则返回TRUE
canstretch:
如果设备能缩放输出的图像则返回TRUE
canstretchinput:
如果设备能在数据流解压到帧缓冲的同时能缩放输出的图像则返回TRUE
cantest:
如果设备能识别“test“关键字则返回TRUE
cav:
当与其它项组合使用时,该参数返回申请CAV格式时,videodiscs设备的返回信息,如果没有插入任何videodiscs该参数为默认值
clockincrementrate:
返回外部时钟将每秒钟分为几个单位,如millisecond返回1000,0表示没有支持的外部时钟
clv:
当与其它项组合使用时,该参数返回申请CLV格式时,videodiscs设备的返回信息
compounddevice:
设备支持文件名时返回TRUE
devicetype:
返回设备类型名,其值可以如下:
cdaudio
dat
digitalvideo
other
overlay
scanner
sequencer
vcr
videodisc
waveaudio
fastplayrate:
返回每秒快放的帧数,如果为0则不支持快放
hasaudio:
如果设备支持音频则返回TRUE
hasclock:
如果设备支持时钟则返回TRUE
hasstill:
如果设备将文件视为一静态图像比动态视频文件更快则返回TRUE
hastimecode:
如果设备支持timecode则返回TRUE
hasvideo:
如果设备支持视频则返回TRUE
inputs:
返回输入设备的总数
maximumplayrate:
返回最快的播放速度,单位为帧每秒
minimumplayrate:
返回最慢的播放速度,单位为帧每秒
numberofmarks:
返回最大的遮罩数量,0表示不支持遮罩
ouputs:
返回输出设备的总数
seekaccuracy:
返回定位某帧的精确度,0表示精确定位,1表示与所要定位的帧的误差不大于1帧
slowplayrate:
返回慢放的播放速度,单位为帧每秒
usesfiles:
如果复合设备使用的数据保存在文件中则返回真
usespalettes:
如果设备使用调色板则返回真
windows:
返回设备支持的可以同时显示的窗口数量
Capture:
将帧缓冲的数据拷贝到指定的文件中。
digital-video支持该命令。
atpathname:
指定所捕捉的帧缓冲中的图像所要保存的路径和文件名
atrectangle:
指定所捕捉的帧缓冲中的图像区域,默认为put命令的source参数指定的区域
注意:
该命令可能会在播放的时候或者在需要资源的操作中失效。
如果帧缓冲在实时地更新,则会暂停。
Close:
关闭设备,释放内存。
当一个MCI设备的所有实例或文件都关闭的时候,该MCI设备被卸载。
所有设备支持该命令。
注意:
如果要关闭所有的设备需如此:
closeall
Configure:
显示一对话框,以设置设备的某些属性。
digital-video支持该命令。
Copy:
将数据拷贝至剪切板。
digital-video支持该命令。
atrectangle:
指定要拷贝的帧缓冲的区域,默认为整个帧缓冲
audiostreamstream:
指定该命令影响的当前工作组的音频流,如果使用了该参数,又想拷贝视频流,则必须指定“videostream“参数,默认为audiostream+videostream
fromposition:
指定开始记录点,默认为当前位置
toposition:
指定终点,该位置的视音频流不被记录,默认为当前工作组的终点
videostreamstream:
指定该命令影响的工作组中的视频流,如果使用了该参数,又想拷贝音频流,则必须指定“audiostream“参数
Cue:
在播放或记录之前执行该命令可以加快播放或记录速度。
digital-video,VCR和waveform-audio支持该命令。
fromposition:
指定起始点
input:
准备记录。
digital-video可以省略
noshow:
准备播放,但不先显示。
output:
准备播放,如果input和output都没指定,默认为output
preroll:
预滚动到下一位置
reverse:
指定为倒放
toposition:
指定终点
注意:
如果设备正在播放、记录或暂停则该命令会失败。
使用了“output”参数时,再使用“play”命令的“from”、“to”或“reverse”参数则会退出该命令,使用了“input”参数时,再使用“record”命令的“from”、“to”或“initialize”参数会退出该命令。
Cut:
将工作区的数据剪切到剪切板。
digital-video支持该命令。
atrectangle:
指定每一帧的区域。
默认为整个帧。
当该参数被指定时,帧并不被删除,代替原图像信息的为黑色块
audiostreamstream:
指定该命令影响的当前工作组的指定音频流,如果使用了该参数,又想剪切视频流,则必须指定“videostream“参数,默认为audiostream+videostream
fromposition:
指定开始剪切点,默认为当前位置
toposition:
指定终点,终点并不被剪切,默认为工作组终点
videostreamstream:
指定该命令影响的当前工作组的指定视频流,如果使用了该参数,又想剪切音频流,则必须指定“videostream“参数,默认为audiostream+videostream
注意:
在没有调用“save”命令前,虽然播放的时候好像“cut”命令已经成功了,但只有当“save”命令被调用后该命令所作的删除才会被写入文件
Delete:
从已打开的多媒体文件中删除数据段。
digital-video和waveform-audio支持该命令。
atrectangle:
指定每帧删除的区域。
默认为整个帧。
当该参数被指定时,帧并不被删除,代替原图像信息的为黑色块
audiostreamstream:
指定该命令影响的当前工作组的音频流。
如果使用了该参数,又想删除视频流,则必须指定“videostream“参数,默认为audiostream+videostream
fromposition:
指定开始位置,默认为当前位置
toposition:
指定终点,默认为工作组终点
videostreamstream:
指定该命令影响的当前工作组的视频流,如果使用了该参数,又想删除音频流,则必须指定“videostream“参数,默认为audiostream+videostream
注意:
在执行任何使用position参数的命令前,你可以使用“set”命令的“timeformat”参数来设定媒体的时间格式,如毫秒,帧等
Escape:
将设备指定的信息传送到某设备。
videodisc设备支持该命令。
Freeze:
终止视频输入或输出,禁止视频流从帧缓冲中获得数据。
dgital-video、video-overlay和VCR支持该命令。
atrectangle:
指定区域。
对于digital-video设备,在指定区域中的像素会遮罩覆盖。
rectangle的格式为X1Y1X2Y2。
X1Y1为左上角坐标,X2Y2指定宽度和长度
field:
冻结指定的区域,该参数为默认的
frame:
冻结整个帧
input:
冻结输入图像的当前帧,不管当前正在播放还是暂停
output:
冻结VCR的当前帧输出。
如果VCR在播放的时候执行该命令,则当前帧被冻结且VCR被暂停。
如果VCE已暂停则当前帧被冻结。
如果input和output都没指定,则默认为output
outside:
指定被冻结的为“at”参数所定义的区域外面部分
注意:
要指定一个不规则区域,可以组合使用freeze和unfreeze命令。
一些video-overlay设备会限制区域的复杂度
index:
控制VCR设备实屏显示。
仅VCR设备支持
off:
关闭实屏显示
on:
打开实屏显示。
显示的项目为“set”命令的“index”参数指定的信息
Info:
获得设备信息,例如算法,版权,所打开的文件,UPC等等。
所有MCI设备都支持该命令。
audioalgorithm:
返回当前音频压缩算法的名称
audioquality;返回当前音频压缩质量的描述。
如果将其quality设为某一值而未使用其指定值可能会返回unknown
copyright:
返回MIDI文件的版权信息
file:
返回复合设备使用的文件名。
如果设备没有打开一个文件而且“load”命令也没被用过,那么返回一个空字符串
infoidentity:
为CD产生一个唯一的序列号
infoupc:
产生CD的UPC(UniversalproductCode全球产品码)
input:
返回当前输入设备的描述
name:
返回sequence名字
output:
返回当前输出设备的描述
product:
返回该设备的描述。
返回信息经常包括产品名称和型号。
返回信息经常是31个字节或更小
stillalgorithm:
返回当前静态图像压缩算法名称
stillquality:
返回当前静态图像压缩质量描述名。
如果将其quality设为某一值而未使用其指定值可能会返回unknown
usage:
返回工作组中视音频数据的使用限制描述
version:
返回设备驱动或硬件的版本
videoalgorithm:
返回当前视频压缩算法名称
videoquality:
返回当前视频压缩质量描述名如果将其quality设为某一值而未使用其指定值可能会返回unknown
windowtext:
返回设备使用的窗口的标题
List:
返回视频和音频的数量和类型。
digital-video和VCR支持该命令。
audioalgorithm:
返回音频压缩算法名称
audioqualityalgorithmalgorithm:
返回“algorithm”指定的压缩质量级别。
如果“algorithm”为“current,”则返回当前压缩算法的质量级别
audiosourcecount:
返回音频输入的总数
audiosourcenumberindex:
返回“index”指定的音频输入源的类型
audiostream:
返回当前工作组中的音频流名称,例如English或German
count:
返回指定类型的数量(供“numberindex”使用)
numberindex:
返回一描述由index指定的类型的字符串。
index必须在1至count返回的数值之间
stillalgorithm:
返回静态图像压缩算法名称
stillqualityalgorithmalgorithm:
返回由algorithm指定的静态图像的压缩质量级别。
如果“algorithm”为“current”,则返回当前压缩算法的质量级别
videoalgorithm:
返回视频压缩算法名称
videoqualityalgorithmalgorithm:
返回由algorithm指定的视频压缩质量级别。
如果“algorithm”为“current”,则返回当前压缩算法的质量级别
videosource:
返回视频源信息。
当使用“count”参数时,返回的是视频源数量。
当使用“number”参数时,返回的是某一视频源的类型。
MCI定义了以下的类型常量:
“ntsc”,“rgb”,“pal”,“secam”,“svideo”,“generic”。
同一类型可能会返回多个源。
当某一频道允许使用多个信号时,则会使用“generic”数据源
videosourcecount:
返回视频输入的总数
videosourcenumberindex:
返回“index”指定的视频输入源类型
videostream:
返回当前工作组视频流名称,例如“funnyending”或“sadending”
注意:
对于VCR设备,“videosource”和“audiosource”必须与“count”或“number”参数同时使用。
如果为“count”,则返回输入的视频或音频流的总数。
如果为“number”,则返回相应的输入设备类型。
它可以为以下值:
“tuner”,“line”,“svideo”,“aux”,“generic”。
一般来说,应该先用“count”参数查询一下VCR设备,再指定“number”参数
Load:
用设备指定的格式打开一个文件。
类似于open的功能。
digital-video和video-overlay支持该命令。
Mark:
控制记录或删除磁带上的遮罩,VCR设备支持该命令。
erase:
如果当前位置存在遮罩,则擦除它
write:
写入遮罩,VCR设备必须在播放或者记录中
遮罩是可以被VCR设备在高速查找中检测到的写入到记录体中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MCI Command String总览 String 总览