转:http://freetoskey.blog.51cto.com/1355382/844141
很多朋友向我索取MCI的资料,但是我这里的资料早就不知道哪里去了,这里把MSDN里面的东西拿出来给大家看一下,方便英语不好的朋友。
用MCI进行编程主要有两个东西需要掌握,下面的篇幅用来说明这两个方面。
一、mciSendCommand函数
这个函数用来打开MCI设备并且通过给设备发送MCI命令来对设备进行控制,这个函数的原型是这样的:
MCIERROR mciSendCommand(
MCIDEVICEID IDDevice , //要控制的设备的ID,无符号整数
UINT uMsg , //MCI命令,像MCI_OPEN,MCI_PLAY
DWORD fdwCommand , //命令的参数,不同的命令有不同的参数可以选择
DWORD dwParam //Param也就是像MCI_OPEN_PARMS之类的,每个命令有不同的Param
);
MCI命令是在mmsystem.h中define的整数,常用的命令有MCI_OPEN(打开设备)、MCI_PLAY(播放)、MCI_CLOSE(关闭设备)等,详细的命令信息请看MSDN,如果没有MSDN光盘可以到http://www.msdn.com 查看。下面演示程序演示如何打开一个设备播放MP3文件。
MCI_OPEN_PARMS op;
op.dwCallback=NULL;
op.lpstrAlias=NULL;
op.lpstrDeviceType=_T("MPEGAudio"); //设备类型,大多数文件可以这样设置
op.lpstrElementName=_T("D://1.mp3") ;//文件路径
op.wDeviceID=NULL; //打开设备成功以后保存这个设备号备用
UINT rs; //接受函数返回结果
rs=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT ,(DWORD)&op);//发送命令打开设备,成功返回0,否则返回错误号,第三个参数这里必须是MCI_OPEN_ELEMENT
if(rs==0) //设备打开成功就播放文件
{
MCI_PLAY_PARMS pp;
pp.dwCallback=NULL;
pp.dwFrom=0; //开始播放的位置
mciSendCommand(op.wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)&pp);//播放文件,如果第 三个参数设为MCI_WAIT则程序窗口会被阻塞,为了避免这种情况可以设为MCI_NOTIFY ,这两个标志的详细区别请见MSDN,区别不小哦。
最后别望了在WM_CLOSE消息处理过程中发送MCI_CLOSE命令关闭设备,写成这样:
MCI_GENERIC_PARMS gp;
gp.dwCallback=NULL;
mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_WAIT,(DWORD)&gp);
最后别忘了在工程属性的link属性页里加入winmm.lib链接,也不要忘了#include <mmsystem.h>