Delphi Vista以上系统的进程静音


本文整理自网络,侵删。

 单个进程的音量控制是从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;

相关阅读 >>

Delphi 移动客户端的路径的安全正确的写法

Delphi删除文件

Delphi 下载并运行的代码

Delphi xe 取得 app 自己的版本号 (狠跨 4 个平台)

android开发-px和dip以及sp的区别

iniocp(小旋风服务套件)

Delphi 从流数据获知文件类型

Delphi 读取文本文件的最后一行

Delphi dbexpress的upwherekeyonly的使用注意事项

Delphi dcc32.exe 参数说明

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...