MCI(Media Control Interface)媒体控制接口是MircroSoft提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。但是古人云:成也萧何,败也萧何。MCI虽然看上去高大全,但对于一些高级应用来说,它是远远不够的。

MCI的控制方式:

一般说来,程序员使用两个函数就可以与MCI打交道了:

MCIERROR mciSendCommand(MCIDEVICEID wDeviceID, UINT uMsg, DWord dwFlags, DWORD dwParam);

命令字符串方式,用接近于日常生活用语的方式发送控制命令,适用于高级编程如VB、TOOLBOOK等。

MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);

命令消息方式,用专业语法发送控制消息,适用于VC等语言编程,此方式直接与MCI设备打交道。

对于mciSendCommand,第一个参数指定了设备标识,这个标识会在程序员打开MCI设备时由系统提供。第二个参数指定将如何控制设备,具体请查阅后面“MCI指令”一栏。第三个参数为访问标识,第四个参数一般是一个数据结构,标识程序在访问MCI时要的一些信息。有关具体资料,请查阅本光盘配套书。

对于mciSendString,第一个参数为一串控制字符串,返回信息由系统填入第二个参数,第三个参数指明返回信息的最大长度,若对MCI装置设定了"notify"标志则需要在第四个参数填上返回窗口句柄。

举例:

mciSendCommand(DeviceID, MCI_CLOSE, NULL, NULL); // 关闭一个MCI设备

mciSendString("open aaa.avi", 0, 0, 0); // 打开文件"aaa.avi"

MCI的设备类型:

设备描述                    描述字符串      说明

MCI_ALL_DEVICE_ID                           所有设备

MCI_DEVTYPE_ANIMATION       Animation       动画设备

MCI_DEVTYPE_CD_AUDIO        Cdaudio         CD音频

MCI_DEVTYPE_DAT             Dat             数字音频

MCI_DEVTYPE_DIGITAL_VIDEO   Digitalvideo    数字视频

MCI_DEVTYPE_OTHER           Other           未定义设备

MCI_DEVTYPE_OVERLAY         Overlay         重叠视频

MCI_DEVTYPE_SCANNER         Scanner         扫描仪

MCI_DEVTYPE_SEQUENCER       Sequencer MIDI  序列器

MCI_DEVTYPE_VCR             Vcr             合式录像机

MCI_DEVTYPE_VIDEODISC       Videodisc       激光视盘

MCI_DEVTYPE_WAVEFORM_AUDIO  waveaudio Wave  音频

对于未在上面定义的MCI设备,用户可查看system.ini文件中[mci]部分,例如:

[mci]

cdaudio=mcicda.drv

sequencer=mciseq.drv

waveaudio=mciwave.drv

avivideo=mciavi.drv

videodisc=mcipionr.drv

vcr=mcivisca.drv

ActiveMovie=mciqtz.drv

QTWVideo=mciqtw.drv

MPEGVideo=C:/PROGRA~1/XING/XINGMP~1/xmdrv95.dll

其中最后两句分别指明了Apple的QuickTime设备,设备名为"QTWVidio"、MPEG影像设备,设备名为"MPEGVideo"。

//------------------------------

// 广告时间:

// 欢迎访问 C++ Builder 研究 - http://www.ccrun.com

//------------------------------

在MCI编程中,既可以将设备描述当设备名,也可以将描述字符串当设备名,一个极端偷懒的办法是程序员不要在程序中指定设备名,Windows将自动根据文件扩展名识别设备类型。

举个例子来说,打开一个多媒体文件有以下三种方式:

[1]:自动识别:打开一个"WAV"文件

MCI_OPEN_PARMS mciOpen;

mciOpen.lpstrDeviceType = 0;

mciOpen.lpstrElementName = "aaa.wav";

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

[2]:指定设备描述:打开CD播放器

MCI_OPEN_PARMS mciOpen;

mciOpen.lpstrDeviceType = (LPSTR)MCI_DEVTYPE_CD_AUDIO ;

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE MCI_OPEN_TYPE_ID, (DWORD)&mciOpen);

[3]:指定描述字符串: 打开一个AVI文件

MCI_OPEN_PARMS mciOpen;

mciOpen.lpstrDeviceType = "avivideo";

mciOpen.lpstrElementName = "aaa.avi";

mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE MCI_OPEN_ELEMENT, (DWORD)&mciOpen);

注重三种打开方式中,函数第三个参数的区别,后面会讲到这种区别。

MCI指令

MCI_BREAK        设置中断键,缺省是”CTRL+BREAK"

MCI_CAPTURE      抓取当前帧并存入指定文件,仅用于数字视频

MCI_CLOSE        关闭设备

MCI_CONFIGURE    弹出配置对话框,仅用于数字视频

MCI_COPY         拷贝数据至剪贴板

MCI_CUE          延时播放或录音

MCI_CUT          删除数据

MCI_DELETE       删除数据

MCI_ESCAPE       仅用于激光视频

MCI_FREEZE       将显示定格

MCI_GETDEVCAPS   获取设备信息

MCI_INDEX        当前屏幕显示与否,仅用于VCR设备

MCI_INFO         获取字符串信息

MCI_LIST         获取输入设备数量,支持数字视频和VCR设备

MCI_LOAD         装入一个文件

MCI_MARK         取消或做一个记号,与MCI_SEEK配套

MCI_MARK         取消或做一个记号,与MCI_SEEK配套

MCI_MONITOR      为数字视频指定报告设备

MCI_OPEN         打开设备

MCI_PASTE        粘帖数据

MCI_PAUSE        暂停当前动作

MCI_PLAY         播放

MCI_PUT          设置源、目的和边框矩形

MCI_QUALITY      定义设备缺省质量

MCI_RECORD       开始录制

MCI_RESERVE      分配硬盘空间

MCI_RESTORE      拷贝一个bmp文件至帧缓冲

MCI_RESUME       使一个暂停设备重新启动

MCI_SAVE         保存数据

MCI_SEEK         更改媒体位置

MCI_SET          设置设备信息

MCI_SETAUDIO     设置音量

MCI_SETTIMECODE  启用或取消VCR设备的时间码

MCI_SETTUNER     设置VCR设备频道

MCI_SETVIDEO     设置video参数

MCI_SIGNAL       在工作区上设置指定空间

MCI_STATUS       获取设备信息

MCI_STEP         使播放设备跳帧

MCI_STOP         停止播放

MCI_SYSINFO      返回MCI设备信息

MCI_UNDO         取消操作

MCI_UNFREEZE     使使用MCI_UNFREEZE的视频缓冲区恢复运动

MCI_UPDATE &nb

资料引用:http://www.knowsky.com/393718.html

MCI使用的更多相关文章

  1. 多媒体(1):MCI接口编程

    目录 多媒体(1):MCI接口编程 多媒体(2):WAVE文件格式分析 多媒体(3):基于WindowsAPI的视频捕捉卡操作 多媒体(4):JPEG图像压缩编码 多媒体(1):MCI接口编程

  2. MCI音乐播放

    缘由: 在改正俄罗斯方块程序的功能的时候,想给这个程序增加一个背景音乐.本想用PlayWave来做的,但想到这个功能十分常用,那还不如封装一个自己的CMusic 类,以备不时之需.本来以为很容易的,可 ...

  3. MCI 函数与命令

    Microsoft 提供的 MMSYSTEM.H 文件中定义了调用 MCI 功能的数据类型和函数原型.在使用 MCI 功能的任何源模块中都应包含该文件. 1. MCI 函数 所有的 MCI 函数名都以 ...

  4. MFC下MCI的使用播放音乐

    最近研究了一下MFC下的音乐的播放,主要使用了MCI 1.需要包含的库文件 在链接资源里(link)添加库文件VFW32.lib winmm.lib 2.包含的头文件 #include <mms ...

  5. (文章转载)MCI编程

    使用MCI API,源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.l ...

  6. MCI:移动持续集成在大众点评的实践

    一.背景 美团是全球最大的互联网+生活服务平台,为3.2亿活跃用户和500多万的优质商户提供一个连接线上与线下的电子商务服务.秉承“帮大家吃得更好,生活更好”的使命,我们的业务覆盖了超过200个品类和 ...

  7. 用MCI处置WAV视频时,怎样才能让视频在当前窗口播放

    用MCI处理WAV视频时,怎样才能让视频在当前窗口播放MCI播放视频默认是新开一个窗口播放,播放完毕返回原来的窗口,想着原来窗口播放如何做? mciSendCommand或mciSendString怎 ...

  8. mci播放mp3

    1MIDI的播放---- 乐器数字化接口(MIDI)是由音乐界的一些大公司(包括生产电子音乐合成器的公司)制订的一项协议,后来被计算机产业所采用并成为多媒体音乐文件的标准格式.MIDI文件一般较小,对 ...

  9. VC用MCI播放mp3等音乐文件

    VC播放mp3等音乐文件,可以使用MCI.MCI ( Media Control Interface ) ,即媒体控制接口,向基于Windows操作系统的应用程序提供了高层次的控制媒体设备接口的能力. ...

  10. VC++中MCI播放音频文件 【转】

    MCI播放mp3音频文件例程 源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Wi ...

随机推荐

  1. 如何让接口文档自动生成,SpringBoot中Swagger的使用

    目录 一.在SpringBoot项目中配置Swagger2 1.pom.xml中对Swagger2的依赖 2.编写配置类启用Swagger 3.配置实体类的文档 4.配置接口的文档 5.访问文档 二. ...

  2. 6.6 hadoop作业调优

    提高速度和性能.可以从下面几个点去优化 可以在本地运行调试来优化性能,但是本地和集群是完全不同的环境,数据流模式也截然不同,性能优化要在集群上测试.有些问题如(内存溢出)只能在集群上重现. HPROF ...

  3. #ICCV2019论文阅读#Fully_convolutional_Features

    一 知识背景 3D scan&cloud points(点云)patch-based features,fully convolutional network, deep metric lea ...

  4. 《大厂面试》京东+百度一面,不小心都拿了Offer

    你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和 ...

  5. 越来越清晰的TFRecord处理图片的步骤

    # 首先是模块的导入 """ os模块是处理文件夹用的 PIL模块是用来处理图片的 """ import tensorflow as tf ...

  6. Spring Boot2 系列教程(十九) | @Value 和 @ConfigurationProperties 的区别

    微信公众号:一个优秀的废人.如有问题,请后台留言,反正我也不会听. 前言 最近有跳槽的想法,所以故意复习了下 SpringBoot 的相关知识,复习得比较细.其中有些,我感觉是以前忽略掉的东西,比如 ...

  7. 使用git将本地文件提交到github存储库

    1.首先你要安装git https://git-for-windows.github.io/ 去官网自行下载对应版本 2.安装好git服务器后,找到你项目的文件夹,右键git bash here打开命 ...

  8. 【JavaScript 基础知识】一篇关于 JavaScript 一些知识点的总结

    JavaScript 中基础数据类型  数据类型名称  数据类型说明 Undefined 只有一个值,即 undefined ,声明变量的初始值. Null 只有一个值,即 null ,表示空指针,  ...

  9. Appium自动化测试框架研究(2)——搭建IOS环境

    今天的文章讲iOS的Appium环境搭建. 对于iOS而言,只能在Mac笔记本上安装Appium,以及所需要的各种组件. 也许有人会问,能否在Windows系统上使用Appium测试iOS手机,这不就 ...

  10. Android栈溢出漏洞利用练习

    在Github上看到一个Linux系统上的栈溢出漏洞利用练习项目: easy-linux-pwn.在原项目基础上,我稍微做了一些改动,将这个项目移植到了Android 9.0系统上: easy-and ...