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;

相关阅读 >>

Delphixe4 版本中,已针对移动平台 引入了 arc 模型

Delphi 语言字符集

Delphi 简单字符串截取函数

Delphi下遍历指定目录下指定类型文件的函数

Delphi 如何用程序控制禁止和起用上网?

Delphi 转换swf到exe

Delphi 通过指点操作获得窗口句柄

Delphi [函数] unicode 检查字符串是否含中文字

Delphi xe 遍历指定数据库,清空各表记录

Delphi代码中嵌入汇编asm代码

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



打赏

取消

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

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

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

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

评论

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