请问,第一步,用什么API函数能把Windows的系统声音关小?
近接着,第二步, 能把Windows的系统声音定位在总大小的1/3处?(就是控制面板的那个声音的主音量在最大的1/3处)?

解决方案 »

  1.   

    mciSendString
    可以,但用法很复杂
      

  2.   


      MMRESULT                         mmr;  
      HMIXER                             m_hmx;  
      MIXERCAPS                       m_mxcaps;  
      MIXERLINE                       m_mxl;  
      MIXERLINECONTROLS       m_mxlc;  
      MIXERCONTROL                 m_mxctrl;  
      ULONG   cConnections,v;  
      mmr   =   mixerGetDevCaps(0,   &m_mxcaps,   sizeof(m_mxcaps));  
      if   (MMSYSERR_NOERROR   !=   mmr)  
      {  
      MessageBox("Can't   Get   Device   Caps.");  
      return   TRUE;  
      }  
      mmr   =   mixerOpen(&m_hmx,   0,   (DWORD)m_hWnd,   0L,   CALLBACK_WINDOW);  
      if   (MMSYSERR_NOERROR   !=   mmr)  
      {  
      MessageBox("Can't   Open   Mixer   Device.");  
      return   TRUE;  
      }  
      m_mxl.cbStruct             =   sizeof(m_mxl);  
      m_mxl.dwDestination   =   0;  
      mmr   =   mixerGetLineInfo((HMIXEROBJ)m_hmx,   &m_mxl,   MIXER_GETLINEINFOF_DESTINATION);  
      if   (MMSYSERR_NOERROR   !=   mmr)  
      {  
      MessageBox("Can't   Get   Mixer   Device   Line   Info   For   Volume   Controls");  
      return   TRUE;  
      }  
      cConnections=m_mxl.cConnections;  
      m_mxlc.cbStruct               =   sizeof(m_mxlc);  
      m_mxlc.dwLineID               =   m_mxl.dwLineID;  
      m_mxlc.cControls             =   m_mxl.cControls;  
      m_mxlc.cbmxctrl               =   sizeof(m_mxctrl);  
      m_mxlc.dwControlType     =   MIXERCONTROL_CONTROLTYPE_VOLUME;  
      m_mxlc.pamxctrl               =   &m_mxctrl;  
      mmr   =   mixerGetLineControls((HMIXEROBJ)m_hmx,   &m_mxlc,   MIXER_GETLINECONTROLSF_ONEBYTYPE);  
      if   (MMSYSERR_NOERROR   !=   mmr)  
      {  
      MessageBox("Can't   Get   Line   Info   For   Volume   Controls");  
      return   TRUE;  
      }  
       
      最后,获得了调整主音量的Control,就可以设置音量了。  
       
      MIXERCONTROLDETAILS   mxcd;  
      MIXERCONTROLDETAILS_UNSIGNED   mxcd_u[2];  
      mxcd.cbStruct=sizeof(mxcd);  
      mxcd.cChannels=m_mxl.cChannels;  
      mxcd.dwControlID=m_mxctrl.dwControlID;  
      mxcd.paDetails=&mxcd_u;  
      mxcd.cbDetails=4;  
      mxcd.cMultipleItems=m_mxctrl.cMultipleItems;  
      mxcd_u[0].dwValue=m_mxctrl.Bounds.dwMaximum;  
      //左声道音量,值从0到m_mxctrl.Bounds.dwMaximum  
      mxcd_u[1].dwValue=m_mxctrl.Bounds.dwMaximum;  
      //右声道音量,,值从0到m_mxctrl.Bounds.dwMaximum  
      mixerSetControlDetails((HMIXEROBJ)m_hmx,&mxcd,MIXER_SETCONTROLDETAILSF_VALUE);