zoukankan      html  css  js  c++  java
  • mciSendString用法

    欢迎来我的个人网站:http://www.rxwcv.cn

         

    使用MCI API,源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.lib。 VS2008在源文件加上#include "mmsystem.h"      #pragma comment(lib,"winmm.lib")

         mciSendString是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等,下面介绍一下它的使用方法:

      该函数有四个参数:
    第一个参数:要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数].
    第二个参数:返回信息的缓冲区,为一指定了大小的字符串变量.
    第三个参数:缓冲区的大小,就是字符变量的长度.
    第四个参数:回调方式,一般设为零
    返回值:函数执行成功返回零,否则返回错误代码
    MCIERROR mciSendString(

          LPCTSTR lpszCommand,    //MCI命令字符串

          LPTSTR lpszReturnString, //存放反馈信息的缓冲区

          UINT  cchReturn,     //缓冲区的长度

          HANDLE hwndCallback    //回调窗口的句柄,一般为NULL

        ); //若成功则返回0,否则返回错误码。

      该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:

        BOOL mciGetErrorString(

          DWORD fdwError,   //函数mciSendString返回的错误码

          LPTSTR lpszErrorText, //接收描述错误的字符串的缓冲区

          UINT  cchErrorText  //缓冲区的长度

        );

      一,打开多媒体文件。
        首先在Dialog上面放一个Picture控件,MCISendString就在这个Picture控件的平面上播放多媒体文件,
    设Picture控件的ID为IDC_STATIC1:
    CStatic *pStatic=(CStatic*)GetDlgItem(IDC_STATIC1);HWND h=pStatic->GetSafeHwnd();
    CString open1;
    char buf[256];
    open1.Format("open f:""mpeg""mpeg1.avi type MPEGVideo Alias movie parent %u Style %u notify",              h,WS_CHILD);
    mciSendString(open1.GetBuffer(open1.GetLength()),buf,sizeof(buf),NULL);
    这样F盘下面的mpeg目录下的mpeg1.avi就打开了,其中的type MPEGVideo是指打开MPEG,AVI等类型,如果不加
    type MPEGVideo这一句,就是打开WAV,MP3等,Alias movie定义了mpeg1.avi的别名为movie,以后可以通过操
    做movie就可以操作mpeg1.avi。
        二,播放多媒体文件。
        上面我们已经打开了f:"mpeg"mpeg1.avi,现在我们来播放它:
    mciSendString("play movie",buf,sizeof(buf),NULL);
        如果想全屏播放:
    mciSendString("play movie fullscreen",buf,sizeof(buf),NULL);


    三,暂停播放。
    mciSendString("pause movie",buf,sizeof(buf),NULL);
        四,停止播放。
    mciSendString("close movie",buf,sizeof(buf),NULL);
        五,得到所播放文件的长度。
    char sPosition[256];long lLength;
    ciSendString("Status movie length", sPosition, 255,0);lLength=strtol(sPosition, NULL, 10);
    其中lLength就是所播放文件的长度。
        六,得到所播放文件的声音大小。
    char chVolume[256];long lVolume;mciSendString("status movie volume",chVolume,255,0);lVolume=strtol(chVolume,NULL,10);其中lVolume就是所播放文件的声音大小。
        七,到你指定的位置播放。
    CString step1;long lPosition;
    lPosition=100;
    step1.Format("seek movie to %ld",lPosition);
    mciSendString(step1.GetBuffer(step1.GetLength()),buf,sizeof(buf),0);
    其中lPosition就是要到的播放位置,可以由你指定。

    首先在初始化中,设定滑块的一些参数

     


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETRANGEMIN,(WPARAM)TRUE,0);//
    设定最小值


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETRANGEMAX,(WPARAM)TRUE,1000);//
    设定最大值


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER),TBM_SETPOS,(WPARAM)TRUE,0);//
    设定当前的滚动值


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER), TBM_SETPAGESIZE, 0, (LPARAM)100);//
    设置 PAGE UP or PAGE DOWN key的进度


    SendMessage(GetDlgItem(hwnd,IDC_SOUND_SLIDER), TBM_SETLINESIZE, 0, (LPARAM)100); //
    设置RIGHT ARROW or DOWN ARROW key的进度

     


    然后响应WM_VSCROLLWM_HSCROLL消息


    添加如下代码:


    if(LOWORD(wParam)==TB_THUMBPOSITION||LOWORD(wParam)==TB_LINEUP||LOWORD(wParam)==TB_LINEDOWN||


    LOWORD(wParam)==TB_PAGEDOWN||LOWORD(wParam)==TB_PAGEUP)


    {


    SetAudioVoice(hWnd);//
    写个设置声音的函数


    }//
    当然你可以逐个控制这些数值

     

     

    SetAudioVoice中:


    int volume=1000-(SendMessage(GetDlgItem(hWnd,IDC_SOUND_SLIDER),TBM_GETPOS,0,0));//
    由于我用的是垂直滑块,向上滚动

    滚动数值是减小的,所以我要想实现向上滚动增加音量,向下滚动减小音量,必须用滑块的最大值1000减去当前的滚动值


    最后是设置声音


    wsprintf(szVolume,"setaudio %s volume to %d",shortPath,volume);


    mciSendString(szVolume,"",0,NULL);

    欢迎来我的个人网站:http://www.rxwcv.cn
  • 相关阅读:
    C#操作REDIS例子
    A C# Framework for Interprocess Synchronization and Communication
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    开源项目选型问题
    Mysql命令大全——入门经典
    RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH 详解(引用)
    zabbix邮件报警通过脚本来发送邮件
    centos启动提示unexpected inconsistency RUN fsck MANUALLY
    rm 或者ls 报Argument list too long
    初遇Citymaker (六)
  • 原文地址:https://www.cnblogs.com/Hewie/p/3434920.html
Copyright © 2011-2022 走看看