mixerGetLineControls
mixerGetControlDetails

解决方案 »

  1.   

    uses mmSystemvar
      rc: MMRESULT;
      hMixer: THandle;
      mxc: MIXERCONTROL;
      mxl: MIXERLINE;
      mxlc: MIXERLINECONTROLS;
      mxcd: TMIXERCONTROLDETAILS;
      volStruct: MIXERCONTROLDETAILS_SIGNED;
      volume: LongInt;
    begin
      rc := mixerOpen(@hMixer, 0,0,0,0);
      if MMSYSERR_NOERROR = rc then
        Exit;  ZeroMemory(@mxl, SizeOf(mxl));
      mxl.cbStruct := SizeOf(mxl);  mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_WAVEIN;  rc := mixerGetLineInfo(hMixer, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
      if MMSYSERR_NOERROR = rc then
        Exit;  ZeroMemory(@mxlc, SizeOf(mxlc));
      mxlc.cbStruct := SizeOf(mxlc);
      mxlc.dwLineID := mxl.dwLineID;
      mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_PEAKMETER;
      mxlc.cControls := 1;
      mxlc.cbmxctrl := SizeOf(mxc);
      mxlc.pamxctrl := @mxc;
      ZeroMemory(@mxc, SizeOf(mxc));
      mxc.cbStruct := SizeOf(mxc);
      rc := mixerGetLineControls(hMixer, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
      if MMSYSERR_NOERROR = rc then
        Exit;  ZeroMemory(@mxcd, SizeOf(mxcd));
      mxcd.cbStruct := SizeOf(mxcd);
      mxcd.cbDetails := SizeOf(volStruct);
      mxcd.dwControlID := mxc.dwControlID;
      mxcd.paDetails := @volStruct;
      mxcd.cChannels := 1;  rc := mixerGetControlDetails(hMixer, @mxcd, MIXER_GETCONTROLDETAILSF_VALUE);
      if MMSYSERR_NOERROR = rc then
        Exit;  volume := volStruct.lValue;  if volume < 0 then
        volume := -volume;