2012-03-04 106 views
1

我试图从我的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#中静音?

+0

你想为你的应用程序只或整个系统被设置为静音? – 2012-03-04 04:07:56

+0

Windows API调用不会抛出异常。尝试检查Marshal.GetLastWin32Error(); – luksan 2012-03-04 04:12:33

+0

@JohnRiselvato - 整个系统。 – XSL 2012-03-04 13:34:04

回答

2

我相信this是你在找什么。这已经在Windows 7上进行了测试,并且还在SO before上询问了这个问题。这可能会帮助你获得你正在寻找的东西。

+1

谢谢。不幸的是,这个DLL对于我的需求来说太臃肿了,而且源代码相当复杂,所以我会试着先将它分开,因为我只需要音量方面。 – XSL 2012-03-04 13:33:43

+0

我想这就是你要去的地方? – 2012-03-05 02:55:06

+0

是的,我无法压缩它,所以我只是使用该库。 – XSL 2012-03-05 22:09:31

0

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

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

+1

示例John Reselvato发布了我的机器上的作品,我想它控制着声卡混音器。这就是我想要达到的目标(尽管发布的样本非常臃肿,而且仅分析卷部分就有点复杂)。 – XSL 2012-03-04 13:35:45

+0

@SSL,哦,我以为你想控制PC扬声器。是的,winmm API对它有很大的帮助。 – Brad 2012-03-04 16:39:14

0

您可以使用AudioSwitcher.AudioApi.CoreAudio扩展名为AudioSwitcher库。只要将它安装与使用程序包管理器控制台NuGet包:

Install-Package AudioSwitcher.AudioApi.CoreAudio

它有一个方法,如MuteToggleMuteVolume财产,所以你可以设置你想要的值。

下面是一个例子:

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