分享
 
 
 

用MCI命令做一个播放器

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

//用MCI命令来实现多媒体的播放功能

//下面的内容几乎有播放器软件的各种功能,你只是引用这些函数就能做出一个播放器来

#include <MMSystem.h>

#include <Vfw.h>

#include <shlobj.H>

#pragma comment(lib, "winmm.lib")

#pragma comment(lib, "Vfw32.lib")

#define AudioStereo 0

#define AudioLeft 1

#define AudioRight 2

WNDPROC OldProc;

LPSTR GetDriverID(LPSTR ff);

bool OpenMusic(LPSTR FileName,HWND hWnd);

bool PlayMusic();

long GetMusicLength();

bool PutToWindow(RECT rc);

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();

HWND GetWindowHandle();

MCIDEVICEID GetDeviceID();

LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam);

bool ShowOpenSave(LPSTR FileName,bool OpenOrSave,HWND hWnd);

bool SavePicture(LPSTR FileName,HWND hWnd);

/*'======================================================*'根据文件名,确定设备

\'=======================================================*/

LPSTR GetDriverID(LPSTR ff)

{

char aa[3];

int i;

char bb[3];

int lenff=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(LPSTR FileName,HWND hWnd=NULL)

{

CloseMusic();

CString ShortPathName;

CString tmpStr=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));

CString lpstrCommand;

lpstrCommand.Format("open %s type %s alias NOWMUSIC",

ShortPathName.GetBuffer(0), DrvID);

if(strcmp(DrvID,"MPEGVideo")>=0)

{

if(hWnd!=NULL)

lpstrCommand.Format("open %s type %s alias NOWMUSIC parent %d style child",

ShortPathName.GetBuffer(0), DrvID,(int)hWnd);

else lpstrCommand+=" style overlapped ";}

if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)

{

OldProc=(WNDPROC)GetWindowLong(GetWindowHandle(),GWL_WNDPROC);

SetWindowLong(GetWindowHandle(),GWL_WNDPROC,(long)MCIWindowProc);

return true;

}

return false;

}

//=======================================================

//关闭MCI设备,FILENAME为文件名,传值代表成功与否

//=======================================================

bool CloseMusic()

{

if(mciSendString("close NOWMUSIC", NULL, 0, 0)==0)

return true;

else return false;

}

//'======================================================

//'播放文件

//'======================================================

bool PlayMusic()

{

if(mciSendString("play NOWMUSIC", NULL, 0, 0)==0)

return true;

else return false;

}

//'======================================================

//'获取媒体的长度

//'======================================================

long GetMusicLength()

{

char RefStr[80];

mciSendString("status NOWMUSIC length", RefStr, 80, 0);

return atol(RefStr);

}

//'======================================================

//'添充画面

//'======================================================

bool PutToWindow(RECT rc)

{

CString lpstrCommand;

lpstrCommand.Format("put NOWMUSIC window at %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)

return true;

else return false;

}

//'======================================================

//'获取当前播放进度

//'======================================================

long GetMusicPos()

{

char RefStr[80];

mciSendString("status NOWMUSIC position", RefStr, 80, 0);

return atol(RefStr);

}

//'======================================================

//'设置媒体的当前进度

//'======================================================

bool SetMusicPos(long Position)

{

CString lpstrCommand;

lpstrCommand.Format("seek NOWMUSIC to %d",

Position);

if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)

return true;

else return false;

}

//'======================================================

//'暂停播放

//'======================================================

bool PauseMusic()

{

if(mciSendString("pause NOWMUSIC", NULL, 0, 0)==0)

return true;

else return false;

}

//'======================================================

//'设置声道

//'======================================================

bool SetAudioSource(int AudioSource)

{

CString lpstrCommand;

lpstrCommand="setaudio NOWMUSIC source to ";

switch(AudioSource){

case AudioStereo:

lpstrCommand+="stereo";

break;

case AudioLeft:

lpstrCommand+="left";

break;

case AudioRight:

lpstrCommand+="right";

break;

}

if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)

return true;

else return false;

}

//'======================================================

//'全屏播放

//'======================================================

bool PlayFullScreen()

{

if(mciSendString("play NOWMUSIC fullscreen", NULL, 0, 0)==0)

return true;

else return false;

}

//'=====================================================

//'设置声音大小1-1000

//'=====================================================

bool SetVolume(int Volume)

{

CString lpstrCommand;

lpstrCommand.Format("setaudio NOWMUSIC volume to %d",

Volume);

if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)

return true;

else return false;

}

//'=====================================================

//'设置播放速度1-2000

//'=====================================================

bool SetSpeed(int Speed)

{

CString lpstrCommand;

lpstrCommand.Format("set NOWMUSIC speed %d",

Speed);

if(mciSendString(lpstrCommand.GetBuffer(0),NULL,0,0)==0)

return true;

else return false;

}

//'====================================================

//'静音True为静音,FALSE为取消静音

//'====================================================

bool SetAudioOnOff(bool AudioOff)

{

if(AudioOff){

if(mciSendString("setaudio NOWMUSIC off",NULL,0,0)==0)

return true;

}

else{

if(mciSendString("setaudio NOWMUSIC on",NULL,0,0)==0)

return true;

}

return false;

}

//'====================================================

//'是否有画面True为有,FALSE为取消

//'====================================================

bool SetWindowShow(bool WindowOff)

{

if(WindowOff){

if(mciSendString("window NOWMUSIC state show",NULL,0,0)==0)

return true;

}

else{

if(mciSendString("window NOWMUSIC state hide",NULL,0,0)==0)

return true;

}

return false;

}

//'====================================================

//'获得当前媒体的状态是不是在播放

//'====================================================

bool IsPlaying()

{

// char RefStr[10];

CString RefStr;

if(mciSendString("status NOWMUSIC mode",

RefStr.GetBuffer(10), 10, 0)==0)

{

if(RefStr.Find("playing")>=0||

RefStr.Find("播放")>=0)

return true;

}

return false;

}

//'====================================================

//'获得播放窗口的handle

//'====================================================

HWND GetWindowHandle()

{

char RefStr[80];

mciSendString("status NOWMUSIC window handle", RefStr, 80, 0);

return (HWND)atol(RefStr);

}

//'====================================================

//'获取DeviceID

//'====================================================

MCIDEVICEID GetDeviceID()

{

return mciGetDeviceID("NOWMUSIC");

}

//'====================================================

//'处理窗口事件

//'====================================================

LRESULT CALLBACK MCIWindowProc(HWND hWnd,UINT message,

WPARAM wParam,LPARAM lParam)

{

// HDC hdc;

int wmId;

switch (message)

{

case WM_COMMAND:

wmId = LOWORD(wParam);

//MessageBox(NULL,"OK","sd",MB_OK);

/*switch(wmId)

{

default:

break;

}//*/

break;

case WM_LBUTTONUP:

return 0;

break;

case WM_RBUTTONUP:

POINT pt;

GetCursorPos(&pt);

break;

case WM_PAINT:

break;

default:

break;

}

return CallWindowProc(OldProc,hWnd,

message,wParam,lParam);

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有