注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 32位开发 > C/C++ 内容正文:MCI(媒体控制接口)相关知识 

MCI(媒体控制接口)相关知识 

发布时间:2006-05-05 19:03:52 来源:计算机世界网 网友评论 0 条

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_ANIMATIONAnimation动画设备

MCI_DEVTYPE_CD_AUDIOCdaudioCD音频

MCI_DEVTYPE_DATDat数字音频

MCI_DEVTYPE_DIGITAL_VIDEODigitalvideo数字视频

MCI_DEVTYPE_OTHEROther未定义设备

MCI_DEVTYPE_OVERLAYOverlay重叠视频

MCI_DEVTYPE_SCANNERScanner扫描仪

MCI_DEVTYPE_SEQUENCERSequencer MIDI序列器

MCI_DEVTYPE_VCRVcr合式录像机

MCI_DEVTYPE_VIDEODISCVideodisc激光视盘

MCI_DEVTYPE_WAVEFORM_AUDIOwaveaudio 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更新显示区域

MCI_WHERE获取设备裁减矩形

MCI_WINDOW指定图形设备窗口和窗口特性

其中比较常用的指令有MCI_OPEN、MCI_CLOSE、MCI_PLAY、MCI_STOP、MCI_PAUSE、MCI_STATUS等等。

相关文章
【评论】【收藏本文】【打印】【关闭】
上一篇文章:使用Windows系统提供的IP控件
下一篇文章:解析Cookie欺骗实现过程及具体应用
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
推荐阅讯
  • VC++下用MSComm控件实现串口通讯
  • C++:最强大的.NET语言之装箱
  • 简单SNMP管理程序的VC++代码实例实现
  • 奇技淫巧C++之返回值重载
  • C/C++中命令行参数的原理
  • C++编写的ATM自动取款机模拟程序分析
  • Visual C++ 入门精解-第一部分
  • c++类的多重继承与虚拟继承
  • C++/CLI中实现singleton模式
  • 轻轻松松学习C++ 标准模板库STL
阅读排行
  • 1.Borland 发布C++ Builder 2006 RAD 环境
  • 2.C/C++程序员应聘常见面试题深入剖析
  • 3.Visual C++常用数据类型转换详解
  • 4.C++中的 static 关键字
  • 5.利用VC++实现局域网实时视频传输
  • 6.浅谈C/C++内存泄漏及其检测工具
  • 7.英国投票否决C++/CLI 微软强攻ISO标准受挫
  • 8.VC++下用MSComm控件实现串口通讯
  • 9.伪随机数生成及在VC++中的实现
  • 10.VC++编程实现对波形数据的频谱分析
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载