【问题标题】:Mute system from code从代码中静音系统
【发布时间】:2012-03-22 01:44:29
【问题描述】:

我正在尝试将我的 C# 控制台应用程序中的 PC 扬声器静音。我已经尝试了建议的代码on this site,它不会影响我机器上的音量。我需要代码才能在 Win7 上工作,我假设代码只能在 XP 上工作。我也试过这个:

[DllImport("winmm.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
public static extern int waveOutSetVolume(IntPtr uDeviceID, int dwVolume);

waveOutSetVolume(IntPtr.Zero, 0);

但是当调用waveOutSetVolume方法时,系统并没有静音,也没有报错。有没有办法在 Win7 中将 PC 从 C# 静音?

【问题讨论】:

  • 您希望它仅用于您的应用程序还是整个系统静音?
  • Windows API 调用不会引发异常。尝试检查 Marshal.GetLastWin32Error();
  • @JohnRiselvato - 整个系统。

标签: c# audio windows-7 pinvoke volume


【解决方案1】:

您可以为AudioSwitcher 库使用AudioSwitcher.AudioApi.CoreAudio 扩展名。只需使用包管理器控制台将其安装为 Nuget 包:

Install-Package AudioSwitcher.AudioApi.CoreAudio

它有MuteToggleMuteVolume属性等方法,所以你可以设置你想要的值。

这是一个例子:

using (var audio = new CoreAudioController())
{
    audio.DefaultPlaybackDevice.Volume = 50;
}

【讨论】:

    【解决方案2】:

    我相信this 是您正在寻找的。这已经在 Windows 7 上进行了测试,并且在 SObefore 上也提出了这个问题。这可能会帮助您获得所需的内容。

    【讨论】:

    • 谢谢。不幸的是,DLL 对于我的需要来说过于臃肿,而且源代码也很复杂,所以我将尝试先将它分开,因为我只需要体积方面。
    • 我猜这就是你想要的?
    • 是的,我无法压缩它,所以我只是按原样使用库。
    【解决方案3】:

    您无法将 PC 扬声器静音。它是一个基本设备,没有混音器等。它出来的是一个恒定的音量。

    您在示例中显示的是用于控制声卡混音器的代码,这是一个完全不同的设备。

    【讨论】:

    • John Reselvato 发布的示例在我的机器上工作,我猜它控制声卡混音器。这就是我想要实现的(尽管发布的示例非常臃肿,并且仅剖析体积部分有些复杂)。
    • @SSL,哦,我以为你想控制 PC 扬声器。是的,winmm API 有很多功能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2019-03-10
    • 1970-01-01
    相关资源
    最近更新 更多