使用Mixer控制
电脑编程技巧与维护的2000年3月版有很详细的东东

解决方案 »

  1.   

    用多媒体API创建,然后发送一个相关命令,到MSDN上找吧
      

  2.   

    在WINDOWS中有相应的API函数可供调用。叫什么MIX...的吧。
      

  3.   

    设置音量的程序      DWORD lr;
        MMRESULT k1;
        UINT cbmxctrls;
        HMIXER phmx;
        UINT mixID;
        MIXERLINE mxl;
        MIXERLINECONTROLS pmxlc;
        PMIXERCONTROL pmxlc1;
        MIXERCONTROLDETAILS pmxcd;
        MIXERCONTROLDETAILS_UNSIGNED  Volume;
        DWORD dSource;
        DWORD i;
        
        // Record Volume
        k1=::mixerGetID(0,&mixID,MIXER_OBJECTF_HMIXER);
        if (k1!=MMSYSERR_NOERROR)
            return;
        // MixerOpen
        k1=::mixerOpen(&phmx,mixID,NULL,NULL,MIXER_OBJECTF_HMIXER);
        if (k1!=MMSYSERR_NOERROR)
            return;
        // MixerGetLineInfo
        mxl.cbStruct=sizeof(MIXERLINE);
        mxl.dwDestination=1;
        k1=::mixerGetLineInfo(0,&mxl,MIXER_GETLINEINFOF_DESTINATION);
        if (k1!=MMSYSERR_NOERROR)
            return;
        lr=mxl.dwLineID; 
        // MixergetLineInfo
        DWORD dConnections;
        dConnections=mxl.cConnections;
        for ( dSource=0 ; dSource<=dConnections ; dSource++)
        {
          mxl.dwSource=dSource; //4
          k1=::mixerGetLineInfo(0, &mxl, MIXER_GETLINEINFOF_SOURCE);
          lr=mxl.dwLineID; 
        
          // --- MixerGetLineControls
          cbmxctrls = sizeof(*pmxlc1) * (UINT)mxl.cControls;
          pmxlc1 = (PMIXERCONTROL)LocalAlloc(LPTR, cbmxctrls);
          pmxlc.cbStruct=sizeof(pmxlc);
          pmxlc.cControls=mxl.cControls;
          pmxlc.cbmxctrl=sizeof(*pmxlc1);
          pmxlc.pamxctrl=pmxlc1;
          pmxlc.dwLineID=lr;//0;//MIXER_GETLINECONTROLSF_ONEBYID;  
          //pmxlc.dwControlType=MIXER_GETLINECONTROLSF_ONEBYTYPE;
          //pmxlc.dwControlID =13;
          k1=::mixerGetLineControls(0,&pmxlc,MIXER_GETLINECONTROLSF_ALL);//MIXER_GETLINECONTROLSF_ONEBYID);//MIXER_GETLINECONTROLSF_ONEBYID&brvbar;MIXER_OBJECTF_HMIXER);
          // MixerGetControlDetails
          /*
          for ( i=0 ; i < pmxlc.cControls ;i++)
          {
            if ( pmxlc1[i].dwControlType==MIXERCONTROL_CONTROLTYPE_MUTE)
                break;      }*/
          //6/30 volum============
          pmxcd.cbStruct=sizeof(MIXERCONTROLDETAILS);
          pmxcd.dwControlID=pmxlc1[0].dwControlID;
          pmxcd.cChannels=1;
          pmxcd.hwndOwner=0;
          pmxcd.cbDetails=sizeof(Volume);
          pmxcd.paDetails=&Volume;
          k1=::mixerGetControlDetails(0,&pmxcd,MIXER_OBJECTF_WAVEOUT);//MIXER_GETCONTROLDETAILSF_VALUE);//&brvbar;MIXER_OBJECTF_WAVEOUT);
          // MixerSetControlDetails
          Volume.dwValue=uVolume;
          //k1=::mixerGetControlDetails(0,&pmxcd,0L);//MIXER_OBJECTF_WAVEOUT) // for test
          k1=::mixerSetControlDetails(0,&pmxcd,0L);//MIXER_OBJECTF_WAVEOUT)
          
          // MixerClose
        }
        k1=::mixerClose(phmx);    // Play Volume
        k1=::mixerGetID(0,&mixID,MIXER_OBJECTF_HMIXER);
        if (k1!=MMSYSERR_NOERROR)
            return;
        // MixerOpen
        k1=::mixerOpen(&phmx,mixID,NULL,NULL,MIXER_OBJECTF_HMIXER);
        if (k1!=MMSYSERR_NOERROR)
            return;
        // MixerGetLineInfo
        mxl.cbStruct=sizeof(MIXERLINE);
        mxl.dwDestination=0;
        k1=::mixerGetLineInfo(0,&mxl,MIXER_GETLINEINFOF_DESTINATION);
        if (k1!=MMSYSERR_NOERROR)
            return;
        lr=mxl.dwLineID; 
        // --- MixerGetLineInfo
        mxl.cbStruct=sizeof(MIXERLINE);
        mxl.dwLineID=lr;
        k1=::mixerGetLineInfo(0,&mxl,MIXER_GETLINEINFOF_LINEID);
        // --- MixerGetLineControls
        cbmxctrls = sizeof(*pmxlc1) * (UINT)mxl.cControls;
        pmxlc1 = (PMIXERCONTROL)LocalAlloc(LPTR, cbmxctrls);
        pmxlc.cbStruct=sizeof(pmxlc);
        pmxlc.cControls=mxl.cControls;
        pmxlc.cbmxctrl=sizeof(*pmxlc1);
        pmxlc.pamxctrl=pmxlc1;
        pmxlc.dwLineID=lr;
        k1=::mixerGetLineControls(0,&pmxlc,MIXER_GETLINECONTROLSF_ALL);
        // MixerGetControlDetails
        for ( i=0 ; i < pmxlc.cControls ;i++)
        {
            if ( pmxlc1[i].dwControlType==MIXERCONTROL_CONTROLTYPE_VOLUME)
                break;    }
        pmxcd.cbStruct=sizeof(MIXERCONTROLDETAILS);
        pmxcd.dwControlID=pmxlc1[i].dwControlID;
        pmxcd.cChannels=1;
        pmxcd.hwndOwner=0;
        pmxcd.cbDetails=sizeof(Volume);
        pmxcd.paDetails=&Volume;
        k1=::mixerGetControlDetails(0,&pmxcd,MIXER_OBJECTF_WAVEOUT);//MIXER_GETCONTROLDETAILSF_VALUE);//&brvbar;MIXER_OBJECTF_WAVEOUT);
          // MixerSetControlDetails
        Volume.dwValue=uVolume;
        k1=::mixerSetControlDetails(0,&pmxcd,0L);//MIXER_OBJECTF_WAVEOUT)
          // MixerClose
        k1=::mixerClose(phmx);