VC++设置与取得系统音量

MMRESULT                  rc;        // 多媒体函数返回结果变量
      HMIXER                      hMixer; // 混合器设备句柄
      MIXERLINE                mxl;      // 音频线路标准状态信息结构体
      MIXERLINECONTROLS mxlc;    // 音频线路控制器集合信息结构体
      MIXERCONTROL          mxc;      // 单个音频线路控制器信息结构体

      // 打开混合器设备
      rc = mixerOpen(&hMixer, // 返回的设备句柄
                                    0,            // 单声卡的设备ID为零
                                    0,            // 不使用回调机制
                                    0,            // 回调函数参数
                                    0);          // MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID

      // 打开混合器设备无错的话,则
      if (MMSYSERR_NOERROR == rc)
      {
              // MIXERLINE 结构体变量清零
              ZeroMemory(&mxl, sizeof(MIXERLINE));

              mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本
              // 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
              mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
             
              // 取得混合器设备的指定线路信息
              rc = mixerGetLineInfo((HMIXEROBJ)hMixer,
                                                          &mxl,
                                                          // 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息
                                                          MIXER_GETLINEINFOF_COMPONENTTYPE);
             
              // 取得混合器设备的指定线路信息成功的话,则
              if (MMSYSERR_NOERROR == rc)
              {
                      // MIXERCONTROL 结构体变量清零
                      ZeroMemory(&mxc, sizeof(MIXERCONTROL));

                      mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本

                      // MIXERLINECONTROLS 结构体变量清零
                      ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS));
                   
                      mxlc.cbStruct = sizeof(mxlc); // 微软用此办法判断版本

                      mxlc.dwLineID = mxl.dwLineID; // 上面取得的声卡音频输出线路标识
                      // 控制类型为控制音量
                      mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
                      mxlc.cControls = 1;                  // 使用 MIXERCONTROL 结构体变量个数
                      mxlc.pamxctrl = &mxc;              // MIXERCONTROL 结构体变量指针
                      mxlc.cbmxctrl = sizeof(mxc); // MIXERCONTROL 结构体变量字节大小
                     
                      // 取得控制器信息
                      rc = mixerGetLineControls((HMIXEROBJ)hMixer,
                                                                          &mxlc,
                                                                          MIXER_GETLINECONTROLSF_ONEBYTYPE);

                      // 取得控制器信息成功的话,则
                      if (MMSYSERR_NOERROR == rc)
                      {
                              // 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum.
                              MIXERCONTROLDETAILS              mxcd;          // 控制器的状态信息
                              MIXERCONTROLDETAILS_SIGNED volStruct; // 音量结构体变量(就一个成员量)

                              // MIXERCONTROLDETAILS 结构体变量清零
                              ZeroMemory(&mxcd, sizeof(mxcd));

                              mxcd.cbStruct = sizeof(mxcd);            // 微软用此办法判断版本
                              mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识
                              mxcd.paDetails = &volStruct;              // 音量结构体变量指针
                              mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小
                              mxcd.cChannels = 1;                                // 取得或设置全部通道

                              #if 0 // 设置音量
                                      volStruct.lValue = 0; // 想要设置的值
                                      rc = mixerSetControlDetails((HMIXEROBJ)hMixer,
                                                                                              &mxcd,
                                                                                              MIXER_SETCONTROLDETAILSF_VALUE);
                              #else
                                      // 获得音量值
                                      rc = mixerGetControlDetails((HMIXEROBJ)hMixer,
                                                                                              &mxcd,
                                                                                              MIXER_GETCONTROLDETAILSF_VALUE);

                                      if (MMSYSERR_NOERROR == rc)
                                      {
                                              CString str = "";

                                              str.Format("音量:%X", volStruct.lValue);

                                              AfxMessageBox(str);
                                      }
                              #endif
                      }
              }
      }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值