2014-04-20 71 views
-2

我有一個控制檯程序,它需要一種方法來使我的電腦上的聲音靜音。如何以編程方式禁用聲音?

下面是這樣做的代碼,但它是爲WF而編寫的。控制檯程序有一個更簡單的模擬程序?

using System; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

namespace VolumeOff 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     [DllImport("winmm.dll", SetLastError = true, CharSet = CharSet.Auto)] 
     public static extern uint waveOutGetVolume(uint hwo, ref uint dwVolume); 

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

     private void button1_Click(object sender, EventArgs e) 
     { 
       uint volume = 0;   
       uint hWO = 0; 
       waveOutGetVolume(hWO, ref volume);  
       textBox1.Text = volume.ToString(); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     {   
       uint hWO = 0;    
       waveOutSetVolume(hWO, Convert.ToUInt32(textBox1.Text.ToString())); 
     } 
    } 
} 

編輯1: 順便提一下,此代碼的工作有點不對勁。使用此滑塊調整系統托盤中的音量(可調整Windows中的音量)不會移動。印象是,我的應用程序不調節系統的音量,而是調節其他音量。

+0

。或者5,如果你計算使用語句。無法讓__much__更容易嗎? – TaW

+0

你有什麼試圖從這個控制檯應用程序?順便說一句,這段代碼片段使用了您通常希望避免的遺留API。 –

+0

@TaW什麼?我不知道怎麼做。如果你知道,然後顯示 – dima

回答

1

在我的電腦上。

假設您想靜音或更改設備上的音量,而不是特定的應用程序。或者,你可能會想到全部設備 - 你不夠具體。總而言之,API的選擇是一種不吉利的猜測,相反,您需要Core Audio API。

From MSDN:使用該MMDevice API和WASAPI

音頻應用通常使用ISimpleAudioVolume界面上的每個會話管理流的音量。 在極少數情況下,專用音頻應用程序可能需要使用IAudioEndpointVolume接口來控制音頻端點設備的主音量級別。 IAudioEndpointVolume的客戶端必須注意避免對改變音頻端點設備的主音量級別的其他音頻應用程序產生潛在的破壞性影響。通常,用戶通過Windows音量控制程序Sndvol.exe對主音量級別進行獨佔控制。

這個問題是導致尋找您感興趣的API /接口:Where in the .NET class library is IAudioEndpointVolume located?另外,這裏是另外一個適合你:如果你減少鬆弛,這是基本的代碼3行Mute/unmute, Change master volume in Windows 7 x64 with C#