vc++ multimedia cómo agregar control de volumen
Aquí tengo el código relevante para ajustar el volumen del sistema. Espero que te sea útil.
Mire aquí (un software de ajuste de volumen que hice antes, código fuente adjunto)
/qiujiejia/blog/item/407335c4b1a1acc239db49c7.html
Lo siguiente es Parte del código de referencia:
bool GetVolumeControl(HMIXER hmixer, long componenteType, long ctrlType, MIXERCONTROL* mxc)
{
MIXERLINECONTROLS mxlc;
MIXERLINE mxl;
mxl.cbStruct = sizeof(mxl);
mxl.dwComponentType = componenteType;
if(!mixerGetLineInfo((HMIXEROBJ )hmixer , &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE))
{
mxlc.cbStruct = sizeof(mxlc);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = ctrlType;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = mxc;
if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE))
devuelve 0;
else
devuelve 1 ;
}
devuelve 0;
}
GetVolumeValue sin firmar(HMIXER hmixer,MIXERCONTROL *mxc)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol; vol.dwValue=0;
mxcd.hwndOwner = 0;
mxcd. cbStruct = tamaño de (mxcd);
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbDetails = tamaño de (vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
return -1;
return vol.dwValue;
}
bool SetVolumeValue(HMIXER hm
ixer ,MIXERCONTROL *mxc, volumen largo)
{
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED vol;vol.dwValue = volumen;
mxcd.hwndOwner = 0;
mxcd.dwControlID = mxc->dwControlID;
mxcd.cbStruct = sizeof(mxcd);
mxcd.cbDetails = sizeof (vol);
mxcd.paDetails = &vol;
mxcd.cChannels = 1;
if(mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER| MIXER_SETCONTROLDETAILSF_VALUE))
devuelve 0;
devuelve 1;
}
//Establece el valor del volumen
bool WINAPI SetVolume(LONG vol)
{
bool Result=false //Se utiliza para determinar si la función se ejecuta correctamente
MIXERCONTROL volCtrl;
HMIXER hmixer;
if(mixerOpen(&hmixer, 0, 0, 0, 0)) devuelve 0;
if(GetVolumeControl(hmixer,MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,MIXERCONTROL_CONTROLTYPE_VOLUME ,&volCtrl) )
{
int ChangeValue=volCtrl.Bounds.lMaximum/INTERVAL;
int TotalValue=ChangeValue*vol;
if( SetVolumeValue(hmixer,&volCtrl,TotalValue))
Result=true;
}
mezcladorClose(hmixer);
devolver resultado;
}
//Devolver valor de volumen
WINAPI GetVolume() sin firmar
{
unsigned rt= 0;
MIXERCONTROL volCtrl;
HMIXER hmixer
if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;
if(!GetVolumeControl(hmixer,MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))
return 0;
int ChangeValue=volCtrl.Bounds.lMaximum/INTERVAL;
//El valor del volumen cambia cada vez que se llama a la función
rt=GetVolumeValue(hmixer,&volCtrl)/ChangeValue //GetVolumeValue obtiene el valor específico
MixerClose(hmixer);
retorno rt;
}