如何以编程方式禁用声音?

时间:2014-04-20 07:54:24

标签: c# audio

我有一个控制台程序,需要一种方法来静音我计算机上的声音

这是执行此操作的代码,但它是为 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中的音量)不会移动。我的印象是,我的应用程序不会调节系统的音量,而是其他的。

1 个答案:

答案 0 :(得分: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?此外,还有另一个适合您的API:Mute/unmute, Change master volume in Windows 7 x64 with C#