mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面我们来介绍一
下它的使用方法:
一,打开多媒体文件。
首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件,
设Picture控件的ID为IDC_STATIC1:
CStatic*pStatic=(CStatic*)GetDlgItem(IDC_STATIC1);
HWNDh=pStatic->GetSafeHwnd();
CStringopen1;
charbuf[256];
open1.Format("openf://mpeg//mpeg1.avitypeMPEGVideoAliasmovieparent%uStyle%unotify",h,WS_CHILD);
mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);
这样F盘下面的mpeg目录下的mpeg1.avi就打开了,其中的typeMPEGVideo是指打开MPEG,AVI等类型,如果不加
typeMPEGVideo这一句,就是打开WAV,MP3等,Aliasmovie定义了mpeg1.avi的别名为movie,以后可以通过操
做movie就可以操作mpeg1.avi。
二,播放多媒体文件。
上面我们已经打开了f:/mpeg/mpeg1.avi,现在我们来播放它:
mciSendString("playmovie",buf,sizeof(buf),NULL);
如果想全屏播放:
mciSendString("playmoviefullscreen",buf,sizeof(buf),NULL);
三,暂停播放。
mciSendString("pausemovie",buf,sizeof(buf),NULL);
四,停止播放。
mciSendString("closemovie",buf,sizeof(buf),NULL);
五,得到所播放文件的长度。
charsPosition[256];longlLength;
ciSendString("Statusmovielength",sPosition,255,0);lLength=strtol(sPosition,NULL,10);
其中lLength就是所播放文件的长度。
六,得到所播放文件的声音大小。
charchVolume[256];longlVolume;mciSendString("statusmovievolume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的声音大小。
七,到你指定的位置播放。
CStringstep1;longlPosition;
lPosition=100;
step1.Format("seekmovieto%ld",lPosition);
mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
其中lPosition就是要到的播放位置,可以由你指定。
==========================================================
下附一个播放器的程序
//用MCI命令来实现多媒体的播放功能 //下面的内容几乎有播放器软件的各种功能,你只是引用这些函数就能做出一个播放器来 |
#include
<
MMSystem.h
>
#include
<
Vfw.h
>
#include
<
shlobj.H
>

#pragma
comment(lib,"winmm.lib")
#pragma
comment(lib,"Vfw32.lib")
#define
AudioStereo0
#define
AudioLeft1
#define
AudioRight2
WNDPROCOldProc;

LPSTRGetDriverID(LPSTRff);
bool
OpenMusic(LPSTRFileName,HWNDhWnd);
bool
PlayMusic();
long
GetMusicLength();
bool
PutToWindow(RECTrc);
long
GetMusicPos();
bool
SetMusicPos(
long
Position);
bool
PauseMusic();
bool
CloseMusic();
bool
SetAudioSource(
int
AudioSource);
bool
PlayFullScreen();
bool
SetVolume(
int
Volume);
bool
SetSpeed(
int
Speed);
bool
SetAudioOnOff(
bool
AudioOff);
bool
SetWindowShow(
bool
WindowOff);
bool
IsPlaying();
HWNDGetWindowHandle();
MCIDEVICEIDGetDeviceID();
LRESULTCALLBACKMCIWindowProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam);
bool
ShowOpenSave(LPSTRFileName,
bool
OpenOrSave,HWNDhWnd);
bool
SavePicture(LPSTRFileName,HWNDhWnd);

/**/
/*'======================================================*
'根据文件名,确定设备
'=======================================================*/
LPSTRGetDriverID(LPSTRff)

...
{
charaa[3];
inti;
charbb[3];
intlenff=strlen(ff);

for(i=0;i<3;i++)...{
aa[i]=ff[lenff-3+i];
if(aa[i]>=97||aa[i]<=122)aa[i]-=32;
}
aa[3]=0;
strcpy(bb,"MID");
if(strcmp(aa,bb)==0)return"Sequencer";
strcpy(bb,"RMI");
if(strcmp(aa,bb)==0)return"Sequencer";
strcpy(bb,"IDI");
if(strcmp(aa,bb)==0)return"Sequencer";
strcpy(bb,"WAV");
if(strcmp(aa,bb)==0)return"Waveaudio";
return"MPEGVideo";
}
//
=======================================================
//
打开MCI设备,FILENAME为文件名,传值代表成功与否
//
=======================================================
bool
OpenMusic(LPSTRFileName,HWNDhWnd
=
NULL)

...
{
CloseMusic();
CStringShortPathName;
CStringtmpStr=FileName;
if(tmpStr.Left(7)=="http://")
ShortPathName=FileName;
else
GetShortPathName(FileName,
ShortPathName.GetBuffer(0),255);
//MessageBox(NULL,ShortPathName.GetBuffer(0),"",MB_OK);
char*DrvID=GetDriverID(ShortPathName.GetBuffer(0));
CStringlpstrCommand;
lpstrCommand.Format("open%stype%saliasNOWMUSIC",
ShortPathName.GetBuffer(0),DrvID);
if(strcmp(DrvID,"MPEGVideo")>=0)

...{
if(hWnd!=NULL)
lpstrCommand.Format("open%stype%saliasNOWMUSICparent%dstylechild",
ShortPathName.GetBuffer(0),DrvID,(int)hWnd);
elselpstrCommand+="styleoverlapped";}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)

...{
OldProc=(WNDPROC)GetWindowLong(GetWindowHandle(),GWL_WNDPROC);
SetWindowLong(GetWindowHandle(),GWL_WNDPROC,(long)MCIWindowProc);
returntrue;
}
returnfalse;
}
//
=======================================================
//
关闭MCI设备,FILENAME为文件名,传值代表成功与否
//
=======================================================
bool
CloseMusic()

...
{
if(mciSendString("closeNOWMUSIC",NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'======================================================
//
'播放文件
//
'======================================================
bool
PlayMusic()

...
{
if(mciSendString("playNOWMUSIC",NULL,0,0)==0)
returntrue;
elsereturnfalse;

}
//
'======================================================
//
'获取媒体的长度
//
'======================================================
long
GetMusicLength()

...
{
charRefStr[80];
mciSendString("statusNOWMUSIClength",RefStr,80,0);
returnatol(RefStr);
}
//
'======================================================
//
'添充画面
//
'======================================================
bool
PutToWindow(RECTrc)

...
{
CStringlpstrCommand;
lpstrCommand.Format("putNOWMUSICwindowat%d%d%d%d",
rc.left,rc.top,rc.right-rc.left,rc.bottom-rc.top);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'======================================================
//
'获取当前播放进度
//
'======================================================
long
GetMusicPos()

...
{
charRefStr[80];
mciSendString("statusNOWMUSICposition",RefStr,80,0);
returnatol(RefStr);
}
//
'======================================================
//
'设置媒体的当前进度
//
'======================================================
bool
SetMusicPos(
long
Position)

...
{
CStringlpstrCommand;
lpstrCommand.Format("seekNOWMUSICto%d",
Position);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'======================================================
//
'暂停播放
//
'======================================================
bool
PauseMusic()

...
{
if(mciSendString("pauseNOWMUSIC",NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'======================================================
//
'设置声道
//
'======================================================
bool
SetAudioSource(
int
AudioSource)

...
{
CStringlpstrCommand;
lpstrCommand="setaudioNOWMUSICsourceto";

switch(AudioSource)...{
caseAudioStereo:
lpstrCommand+="stereo";
break;
caseAudioLeft:
lpstrCommand+="left";
break;
caseAudioRight:
lpstrCommand+="right";
break;
}
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'======================================================
//
'全屏播放
//
'======================================================
bool
PlayFullScreen()

...
{
if(mciSendString("playNOWMUSICfullscreen",NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'=====================================================
//
'设置声音大小1-1000
//
'=====================================================
bool
SetVolume(
int
Volume)

...
{
CStringlpstrCommand;
lpstrCommand.Format("setaudioNOWMUSICvolumeto%d",
Volume);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'=====================================================
//
'设置播放速度1-2000
//
'=====================================================
bool
SetSpeed(
int
Speed)

...
{
CStringlpstrCommand;
lpstrCommand.Format("setNOWMUSICspeed%d",
Speed);
if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)
returntrue;
elsereturnfalse;
}
//
'====================================================
//
'静音True为静音,FALSE为取消静音
//
'====================================================
bool
SetAudioOnOff(
bool
AudioOff)

...
{

if(AudioOff)...{
if(mciSendString("setaudioNOWMUSICoff",NULL,0,0)==0)
returntrue;
}

else...{
if(mciSendString("setaudioNOWMUSICon",NULL,0,0)==0)
returntrue;
}
returnfalse;
}
//
'====================================================
//
'是否有画面True为有,FALSE为取消
//
'====================================================
bool
SetWindowShow(
bool
WindowOff)

...
{

if(WindowOff)...{
if(mciSendString("windowNOWMUSICstateshow",NULL,0,0)==0)
returntrue;
}

else...{
if(mciSendString("windowNOWMUSICstatehide",NULL,0,0)==0)
returntrue;
}
returnfalse;
}
//
'====================================================
//
'获得当前媒体的状态是不是在播放
//
'====================================================
bool
IsPlaying()

...
{
//charRefStr[10];
CStringRefStr;
if(mciSendString("statusNOWMUSICmode",
RefStr.GetBuffer(10),10,0)==0)

...{
if(RefStr.Find("playing")>=0||
RefStr.Find("播放")>=0)
returntrue;
}
returnfalse;
}
//
'====================================================
//
'获得播放窗口的handle
//
'====================================================
HWNDGetWindowHandle()

...
{
charRefStr[80];
mciSendString("statusNOWMUSICwindowhandle",RefStr,80,0);
return(HWND)atol(RefStr);
}
//
'====================================================
//
'获取DeviceID
//
'====================================================
MCIDEVICEIDGetDeviceID()

...
{
returnmciGetDeviceID("NOWMUSIC");
}
//
'====================================================
//
'处理窗口事件
//
'====================================================
LRESULTCALLBACKMCIWindowProc(HWNDhWnd,UINTmessage,
WPARAMwParam,LPARAMlParam)

...
{

//HDChdc;
intwmId;

switch(message)

...{
caseWM_COMMAND:
wmId=LOWORD(wParam);
//MessageBox(NULL,"OK","sd",MB_OK);

/**//*switch(wmId)
{
default:
break;
}//*/
break;
caseWM_LBUTTONUP:
return0;
break;
caseWM_RBUTTONUP:
POINTpt;

GetCursorPos(&pt);
break;
caseWM_PAINT:

break;

default:
break;
}
returnCallWindowProc(OldProc,hWnd,
message,wParam,lParam);

}





