mciSendString 和 mciSendCommand 函数的简单使用

使用函数前必须应该包含头文件:#include  

并导入库:#pragma comment


mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等

函数原型如下:

MCIERROR mciSendString(
LPCTSTR lpszCommand, //命令字符串:如 open、play 、close等
LPTSTR lpszReturnString, //接受返回信息的字符串 一般为NULL
UINT cchReturn,   //返回字符串的大小
HANDLE hwndCallback //回调窗口句柄
);

该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:
 BOOL mciGetErrorString(
DWORD fdwError,   //错误代码
   LPTSTR lpszErrorText, //接收错误描述信息
    UINT  cchErrorText  //第二参数的大小
);


1、mciSendString函数播放mp3文件

其步骤为:打开----->>使用(播放、停止等)----->>关闭(不使用应该关闭)

例如打开当前工程下res文件中的mp3文件:


mciSendString(_T("open res\\和兰花在一起.mp3 alias music"),NULL,0,NULL);//打开文件

需要用到打开命令:open device_name type device_type alias device_alias

device_name:设备名,一般使用文件名字

type device_type:设备类型,可省略

alias device_alias:设备别名,在以后操作时可以使用此名字,方便

mciSendString(_T("play music repeat"),NULL,0,NULL);//重复播放

需要用到的播放参数: play device_alias from pos1 to pos2 wait repeat

devic_alias:含义同上

from pos1 to pos2从指定的磁道播放到另一磁道,如果省略form pos1则从当前开始磁道播放;若省略to pos2 则播放至结束

wait:如果指定这关键,则函数只有等到播放完才返回

repea:决定是否重复播放

mciSendString(_T("close music"),NULL,0,NULL);//关闭音乐

2、mciSendCommand播放mp3文件

该函数与mciSendString函数不同,该函数是基于命令消息(定义的常量)的,而mciSendString函数的命令是基于字符串的

函数原型如下:

MCIERROR mciSendCommand(
MCIDEVICEID IDDevice, //设备的ID,打开是不用此参数
UINT uMsg, //命令消息,如:MIC_OPEN(与上述open字符串是等价的)
DWORD fdwCommand, //额外的命令标记,如:指定 MCI_OPEN_ALIAS 则表明dwParam参数所指结构体中的lpOpen参数指向的为别名;若为MCI_OPEN_ELEMENT则表明lpOpen参数指向的为文件名

DWORD_PTR dwParam //为一结构指针,如:MCI_OPEN_PARMS(打开是所需的结构体)、MCI_PLAY_PARMS(播放是所需的结构体)、MCI_GENERIC_PARMS(结束时所需的结构体)
);


MCI_OPEN_PARMS open;//定义打开结构体变量
open.lpstrElementName = _T("res\\和兰花在一起.mp3");//填充参数
mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,DWORD_PTR(&open));//打开
MCI_PLAY_PARMS play;//定义播放结构题变量
mciSendCommand(open.wDeviceID,MCI_PLAY,MCI_WAIT,DWORD_PTR(&play));//播放,此处是阻塞模式,播放完后才返回。也可以指定为0

//////////////////////////////////////////////当不需要播放时,关闭

MCI_GENERIC_PARMS close;
mciSendCommand(DeviceID,MCI_CLOSE,0,DWORD_PTR(&close));

DeviceID与打开时的ID一致

这种方式和上面的播放是一样的作用,但效率要高些

关于mciSendString 和 mciSendCommand函数的其他使用情况,以及windows多媒体库winmm.h中相关函数参考一下网站:

http://baike.baidu.com/view/1622810.htm

http://blog.163.com/guobin0517@126/blog/static/50841978201092974353636/

http://baike.baidu.com/view/4189925.htm

http://baike.baidu.com/view/2089748.htm

http://baike.baidu.com/link?url=w55fEX2t7hLA3q8b7dH6W47dW6qSljkujum1kScPUgtCjgv3F1lzfmkiHVWQa-Ly(其他相关函数)


你可能感兴趣的:(Windos,API等)