[wdmaudiodev] Re: Turn System Sounds On/Off

  • From: "jerry_wang" <jerry_wang@xxxxxxxxxxxxxx>
  • To: <wdmaudiodev@xxxxxxxxxxxxx>
  • Date: Wed, 21 Apr 2004 10:31:01 +0800

hi, Sam

Maybe I can help you.
before tow years,i wrote the function as following:

BOOL CompleteMuteFunction(BOOL bGetStatus,BOOL *pbStatus,BOOL bState)
//bGetStatus : whether return the Mixer Status
//pbStatus,if bGetStatus == TRUE,then return Mixer Status on the pointer
//bState, if bState== TRUE,only return current Status, otherwise reset the
Status
{
 HMIXER  Mutehmx;
 MMRESULT mmresult;

 MIXERCAPS mxcaps;
 MIXERLINE mxl;
 MIXERLINECONTROLS mxlc;
 MIXERCONTROL mxc;
 MIXERCONTROLDETAILS mxcd;
 MIXERCONTROLDETAILS_BOOLEAN mxcdb;
 mmresult = mixerOpen(&Mutehmx,0,(DWORD)hWndMain,0,MIXER_OBJECTF_MIXER);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 mmresult = mixerGetDevCaps(0,&mxcaps,sizeof(MIXERCAPS));
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 memset((LPVOID)(&mxl),0,sizeof(MIXERLINE));
 mxl.cbStruct = sizeof(MIXERLINE);
 mxl.dwDestination = 0;
 mmresult =
mixerGetLineInfo((HMIXEROBJ)Mutehmx,&mxl,MIXER_GETLINEINFOF_DESTINATION);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 mxlc.cbStruct       = sizeof(MIXERLINECONTROLS);
 mxlc.dwLineID  = mxl.dwLineID;
 mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_MUTE;
 mxlc.cControls  = mxl.cControls;
 mxlc.cbmxctrl  = sizeof (MIXERCONTROL);
 mxlc.pamxctrl  = &mxc;
 mmresult = mixerGetLineControls((HMIXEROBJ)Mutehmx, &mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 mxcd.cbStruct  = sizeof(MIXERCONTROLDETAILS);
 mxcd.dwControlID = mxc.dwControlID;
 mxcd.cChannels  = 1;
 mxcd.cMultipleItems = mxc.cMultipleItems;
 mxcd.cbDetails  = sizeof(MIXERCONTROLDETAILS_BOOLEAN);
 mxcd.paDetails   = &mxcdb;

 mmresult =
mixerGetControlDetails((HMIXEROBJ)Mutehmx,&mxcd,MIXER_GETCONTROLDETAILSF_VAL
UE);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  Mutehmx=NULL;
  return FALSE;
 }
 if(bState==TRUE)
 {
  *pbStatus=!mxcdb.fValue;
  mixerClose(Mutehmx);
  Mutehmx=NULL;
 }
 else
 {
  if(pbStatus!=NULL)  //得到Mute状态,pbStatus用于控制
  {
   *pbStatus=mxcdb.fValue;
  }
  if(bGetStatus)
  {
   mixerClose(Mutehmx);
   Mutehmx=NULL;
   return TRUE;
  }

  mxcdb.fValue = !mxcdb.fValue;

  mmresult =
mixerSetControlDetails((HMIXEROBJ)Mutehmx,&mxcd,MIXER_GETCONTROLDETAILSF_VAL
UE);
  mixerClose(Mutehmx);
  Mutehmx=NULL;

  if(pbStatus!=NULL)
   *pbStatus=!(*pbStatus);
 }
 return TRUE;
}

and another function as following:

BOOL ControlVolume(int nVolume,BOOL bGetVolume,DWORD *pdwCurrentVolume)
//nVolume,inc or dec Volume( 1 or -1 )
//bGetVolume,whether return the volume
//if bGetVolume == TRUE, return volume on the pointer

{
 UINT  mixerID = 0,nUnit;
 MMRESULT mmresult;
 HMIXER  Mutehmx;

 MIXERCAPS mxcaps;
 MIXERLINE mxl;
 MIXERLINECONTROLS mxlc;
 MIXERCONTROL mxc;
 MIXERCONTROLDETAILS mxcd;
 MIXERCONTROLDETAILS_UNSIGNED mxcdu;

 mmresult = mixerOpen(&Mutehmx,mixerID,0,0,MIXER_OBJECTF_MIXER);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 mmresult = mixerGetDevCaps(mixerID,&mxcaps,sizeof(MIXERCAPS));
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 mxl.cbStruct = sizeof(MIXERLINE);
 mxl.dwDestination = 0;//only get the first
 mxl.dwSource = 0;
// mxl.dwComponentType=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
 mmresult =
mixerGetLineInfo((HMIXEROBJ)Mutehmx,&mxl,MIXER_GETLINEINFOF_DESTINATION);//M
IXER_GETLINEINFOF_COMPONENTTYPE
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 mxlc.cbStruct       = sizeof(MIXERLINECONTROLS);
 mxlc.dwLineID  = mxl.dwLineID;
 mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
 mxlc.cControls  = mxl.cControls;
 mxlc.cbmxctrl  = sizeof (MIXERCONTROL);
 mxlc.pamxctrl  = &mxc;
 mmresult = mixerGetLineControls((HMIXEROBJ)Mutehmx, &mxlc,
MIXER_GETLINECONTROLSF_ONEBYTYPE);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 //get volume
 mxcd.cbStruct  = sizeof(MIXERCONTROLDETAILS);
 mxcd.dwControlID = mxc.dwControlID;
 mxcd.cChannels  = 1;
 mxcd.cMultipleItems = mxc.cMultipleItems;
 mxcd.cbDetails  = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
 mxcd.paDetails   = &mxcdu;
 mmresult =
mixerGetControlDetails((HMIXEROBJ)Mutehmx,&mxcd,MIXER_GETCONTROLDETAILSF_VAL
UE);
 if (MMSYSERR_NOERROR != mmresult)
 {
  mixerClose(Mutehmx);
  return FALSE;
 }
 //now set volume

 DWORD dwMin = mxc.Bounds.dwMinimum;
 DWORD dwMax = mxc.Bounds.dwMaximum;

 nUnit=(dwMax-dwMin)/MAX_VOLUME;
 if(bGetVolume)
 {
  mixerClose(Mutehmx);
  if(pdwCurrentVolume!=NULL)
   *pdwCurrentVolume=mxcdu.dwValue/nUnit;
  return TRUE;
 }
 if(nVolume==0)
  mxcdu.dwValue =dwMin;
 else {
  nVolume=(INT)(nUnit*nVolume);
  mxcdu.dwValue +=nVolume;
  if(mxcdu.dwValue>dwMax)
   if(nVolume<0)
    mxcdu.dwValue = dwMin;
   else mxcdu.dwValue=dwMax;
 }
 if(pdwCurrentVolume!=NULL)
   *pdwCurrentVolume=mxcdu.dwValue/nUnit;
 mmresult =
mixerSetControlDetails((HMIXEROBJ)Mutehmx,&mxcd,MIXER_GETCONTROLDETAILSF_VAL
UE);
 mixerClose(Mutehmx);
 return TRUE;
}

I hope that these code can help you .

Jerry
from beijing of P.R.China

2004.4.21

----- Original Message -----
From: "Sam Tertzakian" <thatsamiam@xxxxxxxxxxx>
To: <wdmaudiodev@xxxxxxxxxxxxx>
Sent: Monday, April 19, 2004 8:29 PM
Subject: [wdmaudiodev] Turn System Sounds On/Off


> Hi,
>
> I need to write a routine that runs in user mode that allows me to turn
> System Sounds on or off in 98SE, 2000 and XP.  Does anybody know the best
> way to do this?
>
> Thank you for your suggestions.
>
> _________________________________________________________________
> Watch LIVE baseball games on your computer with MLB.TV, included with MSN
> Premium!
>
http://join.msn.com/?page=features/mlb&pgmarket=en-us/go/onm00200439ave/dire
ct/01/
>
> ******************
>
> WDMAUDIODEV addresses:
> Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
> Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
> Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
> Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx
>
> URL to WDMAUDIODEV page:
> http://www.wdmaudiodev.de/
>

******************

WDMAUDIODEV addresses:
Post message: mailto:wdmaudiodev@xxxxxxxxxxxxx
Subscribe:    mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=subscribe
Unsubscribe:  mailto:wdmaudiodev-request@xxxxxxxxxxxxx?subject=unsubscribe
Moderator:    mailto:wdmaudiodev-moderators@xxxxxxxxxxxxx

URL to WDMAUDIODEV page:
http://www.wdmaudiodev.de/

Other related posts: