2012-03-04 76 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; 
}