如题,用该组API来控制系统音量,能获得当前的系统音量信息,能调节系统音量大小,MSDN上介绍了相关步骤,还有示例代码,居然看得出明显的逻辑错误,讶异,由于功力不足,修改后也得不到想要的结果,求哪位仁兄来指导指导啊,贴些代码给看看,相关的就行,多多亦善,麻烦加中文注解,谢先。

解决方案 »

  1.   

    if (::mixerOpen(&m_hMixer,
    0,
    reinterpret_cast<DWORD>(this->GetSafeHwnd()),
    NULL,
    MIXER_OBJECTF_MIXER | CALLBACK_WINDOW)
    != MMSYSERR_NOERROR)
    ASSERT(FALSE); m_mxl.cbStruct=sizeof(MIXERLINE);
    m_mxl.dwComponentType=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    if (::mixerGetLineInfo(reinterpret_cast<HMIXEROBJ>(m_hMixer),
       &m_mxl,
       MIXER_OBJECTF_HMIXER |
       MIXER_GETLINEINFOF_COMPONENTTYPE)
    != MMSYSERR_NOERROR)
    ASSERT(FALSE); m_mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
    m_mxlc.dwLineID = m_mxl.dwLineID;
    m_mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
    m_mxlc.cControls = 1;
    m_mxlc.cbmxctrl = sizeof(MIXERCONTROL);
    m_mxlc.pamxctrl = &m_mxc;
    if (::mixerGetLineControls(reinterpret_cast<HMIXEROBJ>(m_hMixer),
       &m_mxlc,
       MIXER_OBJECTF_HMIXER |
       MIXER_GETLINECONTROLSF_ONEBYTYPE)
    != MMSYSERR_NOERROR)
    ASSERT(FALSE); m_mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
    m_mxcd.dwControlID = m_mxc.dwControlID;
    m_mxcd.cChannels = 1;
    m_mxcd.cMultipleItems = 0;
    m_mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
    m_mxcd.paDetails = &m_volume;
    if (::mixerGetControlDetails(reinterpret_cast<HMIXEROBJ>(m_hMixer),
     &m_mxcd,
     MIXER_OBJECTF_HMIXER |
     MIXER_GETCONTROLDETAILSF_VALUE)
    != MMSYSERR_NOERROR)
    ASSERT(FALSE);
      

  2.   

    但是,好像怎样才能控制其它设备如:line in ,wave等..
    gz...
      

  3.   

    修改相应参数就好,给的就那么十来个API,好有灵活性。