//   允许/禁止静音   
  //   63   63   72   75   6E   2E   63   6F   6D   
    
  #include   <mmsystem.h>   
    
  bool   SetMicrophoneVolumeMute(bool   bMute)   
  {   
          HMIXER   hMixer;   
          MIXERLINECONTROLS   mxlc;   
          MIXERCONTROLDETAILS   mxcd;   
          MIXERCONTROLDETAILS_UNSIGNED   vol;   
          MIXERCONTROL   mxc;   
          MIXERLINE   mxl;   
          MIXERCONTROLDETAILS_BOOLEAN   mcdb;   
    
          //   Check   if   Mixer   is   available   
          int   nMixerDevs   =   mixerGetNumDevs();   
          if(nMixerDevs   <   1)   
                  return   false;   
          bool   bRet   =   false;   
          //   open   the   mixer   
          UINT   uRet   =   mixerOpen(&hMixer,   0,   0,   0,   0);   
          if(uRet   ==   MMSYSERR_NOERROR)   
          {   
                  mxl.dwComponentType   =   MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;   
                  mxl.cbStruct   =   sizeof(mxl);   
                  //   mixerline   info   
                  uRet   =   mixerGetLineInfo(hMixer,   &mxl,   MIXER_GETLINEINFOF_COMPONENTTYPE);   
                  if(uRet   ==   MMSYSERR_NOERROR)   
                  {   
                          ZeroMemory(&mxlc,   sizeof(mxlc));   
                          mxlc.cbStruct   =   sizeof(mxlc);   
                          mxlc.dwLineID   =   mxl.dwLineID;   
                          mxlc.dwControlType   =   MIXERCONTROL_CONTROLTYPE_MUTE;   
                          mxlc.cControls   =   1;     
                          mxlc.cbmxctrl   =   sizeof(mxc);   
                          mxlc.pamxctrl   =   &mxc;     
                          //   Get   the   mute   control   
                          uRet   =   mixerGetLineControls(hMixer,   &mxlc,   MIXER_GETLINECONTROLSF_ONEBYTYPE);   
                          if(uRet   ==   MMSYSERR_NOERROR)   
                          {   
                                  ZeroMemory(&mxcd,   sizeof(mxcd));   
                                  mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);   
                                  mxcd.dwControlID   =   mxc.dwControlID;   
                                  mxcd.cChannels   =   1;   
                                  mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_BOOLEAN);   
                                  mxcd.paDetails   =   &mcdb;   
                                  mcdb.fValue   =   bMute;   
                                  //   set,   unset   mute   
                                  uRet   =   mixerSetControlDetails(   
                                                  hMixer,   &mxcd,   MIXER_SETCONTROLDETAILSF_VALUE);   
                                  //   mixerGetControlDetails(hMixer,   &mxcd,   
                                  //   MIXER_GETCONTROLDETAILSF_VALUE);   
                                  //   Result   =   Boolean(mcdMute.fValue);   
                                  bRet   =   uRet   ==   MMSYSERR_NOERROR;   
                          }   
                          else   
                                ShowMessage("GetLineInfo   Error");   
                  }   
                  uRet   =   mixerClose(hMixer);   
          }   
          return   bRet;   
  }   
    
  //   使用举例:   
  //   SetMicrophoneVolumeMute(false);   

解决方案 »

  1.   

    //   允许/禁止麦克风静音   
      //   63   63   72   75   6E   2E   63   6F   6D   
        
      #include   <mmsystem.h>   
        
      bool   SetMicrophoneVolumeMute(bool   bMute)   
      {   
              HMIXER   hMixer;   
              MIXERLINECONTROLS   mxlc;   
              MIXERCONTROLDETAILS   mxcd;   
              MIXERCONTROLDETAILS_UNSIGNED   vol;   
              MIXERCONTROL   mxc;   
              MIXERLINE   mxl;   
              MIXERCONTROLDETAILS_BOOLEAN   mcdb;   
        
              //   Check   if   Mixer   is   available   
              int   nMixerDevs   =   mixerGetNumDevs();   
              if(nMixerDevs   <   1)   
                      return   false;   
              bool   bRet   =   false;   
              //   open   the   mixer   
              UINT   uRet   =   mixerOpen(&hMixer,   0,   0,   0,   0);   
              if(uRet   ==   MMSYSERR_NOERROR)   
              {   
                      mxl.dwComponentType   =   MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;   
                      mxl.cbStruct   =   sizeof(mxl);   
                      //   mixerline   info   
                      uRet   =   mixerGetLineInfo(hMixer,   &mxl,   MIXER_GETLINEINFOF_COMPONENTTYPE);   
                      if(uRet   ==   MMSYSERR_NOERROR)   
                      {   
                              ZeroMemory(&mxlc,   sizeof(mxlc));   
                              mxlc.cbStruct   =   sizeof(mxlc);   
                              mxlc.dwLineID   =   mxl.dwLineID;   
                              mxlc.dwControlType   =   MIXERCONTROL_CONTROLTYPE_MUTE;   
                              mxlc.cControls   =   1;     
                              mxlc.cbmxctrl   =   sizeof(mxc);   
                              mxlc.pamxctrl   =   &mxc;     
                              //   Get   the   mute   control   
                              uRet   =   mixerGetLineControls(hMixer,   &mxlc,   MIXER_GETLINECONTROLSF_ONEBYTYPE);   
                              if(uRet   ==   MMSYSERR_NOERROR)   
                              {   
                                      ZeroMemory(&mxcd,   sizeof(mxcd));   
                                      mxcd.cbStruct   =   sizeof(MIXERCONTROLDETAILS);   
                                      mxcd.dwControlID   =   mxc.dwControlID;   
                                      mxcd.cChannels   =   1;   
                                      mxcd.cbDetails   =   sizeof(MIXERCONTROLDETAILS_BOOLEAN);   
                                      mxcd.paDetails   =   &mcdb;   
                                      mcdb.fValue   =   bMute;   
                                      //   set,   unset   mute   
                                      uRet   =   mixerSetControlDetails(   
                                                      hMixer,   &mxcd,   MIXER_SETCONTROLDETAILSF_VALUE);   
                                      //   mixerGetControlDetails(hMixer,   &mxcd,   
                                      //   MIXER_GETCONTROLDETAILSF_VALUE);   
                                      //   Result   =   Boolean(mcdMute.fValue);   
                                      bRet   =   uRet   ==   MMSYSERR_NOERROR;   
                              }   
                              else   
                                    ShowMessage("GetLineInfo   Error");   
                      }   
                      uRet   =   mixerClose(hMixer);   
              }   
              return   bRet;   
      }   
        
      //   使用举例:   
      //   SetMicrophoneVolumeMute(false);   
      

  2.   

    而且我自己解决的HOOK API可以关闭程序声音,还可以即时打开恢复,如果是关闭系统,那超级简单了。那系统所有声音都没了,做这个功能就一点点意义也没有了
      

  3.   

    不用,只需要HOOK浏览器进程中的音量播放接口,假如用你的方法,如果当前打开了10个网页,都有声音,而且页面也加载完毕了,那么操作接口就失去意义了,我观察过几个主流浏览器,都是 用到  WINN.DLL  DSOUND.DLL   WINN.DLL里面的函数被我搞定了,就是DSOUND,DLL没弄好
      

  4.   

    谢谢,楼主,提醒了我如何静音IE。may god bless you
      

  5.   

    // 允许/禁止静音   
      // 63 63 72 75 6E 2E 63 6F 6D   
        
      #include <mmsystem.h>   
        
      bool SetMicrophoneVolumeMute(bool bMute)   
      {   
      HMIXER hMixer;   
      MIXERLINECONTROLS mxlc;   
      MIXERCONTROLDETAILS mxcd;   
      MIXERCONTROLDETAILS_UNSIGNED vol;   
      MIXERCONTROL mxc;   
      MIXERLINE mxl;   
      MIXERCONTROLDETAILS_BOOLEAN mcdb;   
        
      // Check if Mixer is available   
      int nMixerDevs = mixerGetNumDevs();   
      if(nMixerDevs < 1)   
      return false;   
      bool bRet = false;   
      // open the mixer   
      UINT uRet = mixerOpen(&hMixer, 0, 0, 0, 0);   
      if(uRet == MMSYSERR_NOERROR)   
      {   
      mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;   
      mxl.cbStruct = sizeof(mxl);   
      // mixerline info   
      uRet = mixerGetLineInfo(hMixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);   
      if(uRet == MMSYSERR_NOERROR)   
      {   
      ZeroMemory(&mxlc, sizeof(mxlc));   
      mxlc.cbStruct = sizeof(mxlc);   
      mxlc.dwLineID = mxl.dwLineID;   
      mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;   
      mxlc.cControls = 1;   
      mxlc.cbmxctrl = sizeof(mxc);   
      mxlc.pamxctrl = &mxc;   
      // Get the mute control   
      uRet = mixerGetLineControls(hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);   
      if(uRet == MMSYSERR_NOERROR)   
      {   
      ZeroMemory(&mxcd, sizeof(mxcd));   
      mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);   
      mxcd.dwControlID = mxc.dwControlID;   
      mxcd.cChannels = 1;   
      mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_BOOLEAN);   
      mxcd.paDetails = &mcdb;   
      mcdb.fValue = bMute;   
      // set, unset mute   
      uRet = mixerSetControlDetails(   
      hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE);   
      // mixerGetControlDetails(hMixer, &mxcd,   
      // MIXER_GETCONTROLDETAILSF_VALUE);   
      // Result = Boolean(mcdMute.fValue);   
      bRet = uRet == MMSYSERR_NOERROR;   
      }   
      else   
      ShowMessage("GetLineInfo Error");   
      }   
      uRet = mixerClose(hMixer);   
      }   
      return bRet;   
      }   
        
      // 使用举例:   
      // SetMicrophoneVolumeMute(false); 
      

  6.   

    很简单的hook API
    1.flash 里面的声音都是WAVE类型  HOOK waveOutWrite
    2.WMP,迅雷看看,PPLIVE什么的是dsound  HOOK  DirectSoundCreate,CreateSoundBuffer,SetVolume我已经实现了
      

  7.   

    我也在研究不过还没搞定。给我你的邮箱,搞定后联系你。[email protected]
      

  8.   

    com hook的思路是完全可行的
      

  9.   

    请参照我写的《屏蔽WebBrowser2控件声音》
    http://blog.csdn.net/farcall/article/details/6337638
    函数封装好了 可以直接使用
      

  10.   

    我 HOOK waveOutWrite能静音,可是怎么能再让声音出来呢?