媒体控制接口(MCI)
MCI大致介绍
媒体控制接口(Media Control Interface,缩写MCI)是由微软和IBM开发的一个高级应用程序接口(API),功能是控制连接到一台Microsoft Windows或OS/2计算机的多媒体外部设备(例如CD-ROM播放机、音频控制器)。
1、mciSendCommand函数
MCIERROR mciSendCommand(MCIDEVICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD dwParam);
-
IDDevice:用来表示一个MCI设备。
-
umsg:表示要发出的消息(MCI_OPEN(打开设备)、MCI_CLOSE(关闭设备)、MCI_PLAY(播放音频)、MCI_STOP(停止播放))
-
fdwCommand:消息指定标志。
-
dwParam:指定一个指向消息数据结构的指针。
返回值:调用成功则返回0,否则返回错误代码消息。
例如:
mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD) & (mymci->OpenParms));
mciSendCommand(data->OpenParms.wDeviceID, MCI_PLAY, MCI_FROM, (DWORD)&(data->PlayParms));
mciSendCommand(mymci->OpenParms.wDeviceID, MCI_CLOSE, MCI_FROM, (DWORD)&(data->PlayParms));
2.mciSendString函数。
MCIERROR mciSendString(LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, HANDLE hwndCallback);
lpszCommand:一个以NULL结尾的定义MCI控制命令的字符串,格式为:command device_name argument
lpszReturnString:一个远指针,它指向由应用程序返回的字符串缓冲区。
cchReturn:指定了缓冲区大小。
hwndCallback:用来指定接收并处理MCI向应用程序发出的MM_MCINOTIFY消息窗口的句柄。
返回值:函数成功调用,则返回0,否则返回错误代码。
例如:
mciSendString("open F:\\Vs_2019\\vs_project\\test\\Debug\\1.mp3 alias bkmusic", NULL, 0, NULL);
mciSendString("play bkmusic ", NULL, 0, NULL);//播放
mciSendString("pause bkmusic ", NULL, 0, NULL);//暂停
mciSendString("stop bkmusic ", NULL, 0, NULL);//停止
mciSendString("close bkmusic ", NULL, 0, NULL);//关闭设备
3.MMSYSTEM.H头文件中还定义了MCI命令所需要的数据结构类型。以下是MCI命令常用的数据结构。
MCI_OPEN_PARMS MCI_OPEN命令消息参数的数据结构
MCI_PLAY_PARMS MCI_PLAY命令消息参数的数据结构
MCI_RECORD_PARMS MCI_RECORD命令消息参数的数据结构
MCI_OPEN_PARMS
typedef struct _MCI_OPEN_PARMS { DWORD dwCallback; //设置MCI_NOTIFY标志时的回调窗口句柄 MCIDEVICEID wDeviceID; //打开设备成功时返回的设备标识号 LPCSTR lpstrDeviceType; //指定所要打开设备类型 LPCSTR lpstrElementName; //对于复合设备,指定设备元素 LPCSTR lpstrAlias; //设备别名 } MCI_OPEN_PARMS;
MCI_PLAY_PARMS
typedef struc{ DWORD dwCallback; //设置MCI_NOTIFY标志时回调窗口句柄 DWORD dwFrom; //播放的起始位置 DWORD dwTo; //播放的结束位置 } MCI_PLAY_PARMS;
MCI_RECORD_PARMS
typedef struct { DWORD_PTR dwCallback; DWORD dwFrom; DWORD dwTo; } MCI_RECORD_PARMS;
例如:
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType = NULL;// "mpegvideo";
OpenParms.lpstrElementName = "F:\\Vs_2019\\vs_project\\test\\Debug\\1.mp3";
OpenParms.wDeviceID = NULL;
mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD) & (mymci->OpenParms));
//打开设备,会自动将设备号存储在wDeviceID
MCI_PLAY_PARMS PlayParms;
PlayParms.dwFrom = 0;
mciSendCommand(OpenParms.wDeviceID, MCI_PLAY, MCI_FROM, (DWORD)&PlayParms);
注意:MCI不能跨线程操作,这是折磨一天得到的结果!!
参考文章链接: 媒体控制接口(MCI)的学习与使用.