RSS订阅 | 匿名投稿
您的位置:网站首页 > 媒体 > 正文

Delphi Vista以上系统的进程静音

作者:admin 来源: 日期:2017/3/19 8:57:48 人气: 标签:

单个进程的音量控制是从Vista系统中才开始支持的,所以此函数需要在Vista及以上的系统中使用。
XP下面使用这个函数会导致系统全局静音。所以在XP下要使进程静音要使用Hook技术.

Delphi XE + Win7 x64 编译测试通过

 

uses

  MMSystem;

 

function EnableMute(const Mute: Boolean): Boolean;

var

  hmx: HMIXER;

  mxlc: MIXERLINECONTROLS;

  mxl: MIXERLINE;

  mxc: MIXERCONTROL;

  mxcd: tMIXERCONTROLDETAILS;

  mxcdMute: MIXERCONTROLDETAILS_BOOLEAN;

begin

  Result := False;

 

  if Win32MajorVersion < 6 then

    Exit;

 

  if mixerOpen(@hmx, 0, 0, 0, 0) <> MMSYSERR_NOERROR then

    Exit;

 

  mxl.cbStruct := SizeOf(mxl);

  mxl.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;

  if mixerGetLineInfo(hmx, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE) = MMSYSERR_NOERROR then

  begin

    mxlc.cbStruct := SizeOf(MIXERLINECONTROLS);

    mxlc.dwLineID := mxl.dwLineID;

    mxlc.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;

    mxlc.cControls := 1;

    mxlc.cbmxctrl := SizeOf(MIXERCONTROL);

    mxlc.pamxctrl := @mxc;

    if mixerGetLineControls(hmx, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE) = MMSYSERR_NOERROR then

    begin

      mxcdMute.fValue := Integer(Mute);

      mxcd.hwndOwner := 0;

      mxcd.dwControlID := mxc.dwControlID;

      mxcd.cbStruct := SizeOf(mxcd);

      mxcd.cbDetails := SizeOf(mxcdMute);

      mxcd.paDetails := @mxcdMute;

      mxcd.cChannels := 1;

      mxcd.cMultipleItems := 0;

      Result := mixerSetControlDetails(hmx, @mxcd, MIXER_OBJECTF_HMIXER or MIXER_SETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR;

    end;

  end;

 

  mixerClose(hmx);

end;


读完这篇文章后,您心情如何?
0
0
0
0
0
0
0
0
本文网址:
下一篇:没有资料