www.pudn.com > 自动计划(autoplan)源代码___强烈推荐 .rar > WAV_Volume.pas


unit WAV_Volume; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Variants, Classes; 
 
  function GetWaveVolumeLeft: Word; 
  function GetWaveVolumeRight: Word; 
  procedure GetWaveVolume(var Left, Right: WORD); 
  procedure SetWaveVolume(const Left, Right: WORD); 
  function SupportsLAndRVolume: boolean; 
 
implementation 
uses mmsystem; 
 
{$R-} 
 
function _GetWaveVolume: DWORD; 
var 
  Woc : TWAVEOUTCAPS; 
  Volume : DWORD; 
  hwo : UINT; 
begin 
  result := 0; 
 
  hwo := WAVE_MAPPER; 
  if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then 
    if (Woc.dwSupport and WAVECAPS_VOLUME) = WAVECAPS_VOLUME then 
    begin 
      if WaveOutGetVolume(hwo, @Volume) = MMSYSERR_NOERROR then 
        Result := Volume; 
    end; 
end; 
 
procedure _SetWaveVolume(const AVolume: DWORD); 
var 
  Woc : TWAVEOUTCAPS; 
  hwo : UINT; 
begin 
  hwo := WAVE_MAPPER; 
 
  if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then 
    if (Woc.dwSupport and WAVECAPS_VOLUME) = WAVECAPS_VOLUME then 
      WaveOutSetVolume(hwo, AVolume); 
end; 
 
function GetWaveVolumeLeft: Word; 
var 
  d : DWORD; 
begin 
  d := _GetWaveVolume; 
  result := LOWORD(d); 
end; 
 
function GetWaveVolumeRight: Word; 
var 
  d : DWORD; 
begin 
  d := _GetWaveVolume; 
  result := HIWORD(d); 
end; 
 
procedure GetWaveVolume(var Left, Right: WORD); 
var 
  d : DWORD; 
begin 
  d := _GetWaveVolume; 
  Left  := LOWORD(d); 
  Right := HIWORD(d); 
end; 
 
 
procedure SetWaveVolume(const Left, Right: WORD); 
var 
  d : DWORD; 
begin 
  d := MAKELONG(Left, Right); 
  _SetWaveVolume( d ); 
end; 
 
function SupportsLAndRVolume: boolean; 
var 
  Woc : TWAVEOUTCAPS; 
  Volume : DWORD; 
  hwo : UINT; 
begin 
  result := false; 
 
  hwo := WAVE_MAPPER; 
  if WaveOutGetDevCaps(WAVE_MAPPER, @Woc, sizeof(Woc)) = MMSYSERR_NOERROR then 
    result := (Woc.dwSupport and WAVECAPS_LRVOLUME) = WAVECAPS_LRVOLUME; 
end; 
 
end.