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

C# 如何以编程方式禁用声音?,c#,audio,C#,Audio,我有一个控制台程序,它需要一种方法使我的计算机上的声音静音 下面是执行此操作的代码,但它是为WF编写的。控制台程序有更简单的模拟吗 using System; using System.Windows.Forms; using System.Runtime.InteropServices; namespace VolumeOff { public partial class Form1 : Form { public Form1() {

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

下面是执行此操作的代码,但它是为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中的音量)不会移动。给人的印象是,我的应用程序并没有调节系统的音量,而是调节其他一些东西

在我的电脑上

假定您希望在设备上静音或更改音量,而不是针对特定应用。或者,你可以想到所有的设备——你不够具体。总之,选择API是一个不吉利的猜测,相反,您需要的是核心音频API

:

使用MMDevice API和WASAPI的音频应用程序通常使用ISimpleAudioVolume接口来管理每个会话的流音量级别在极少数情况下,专用音频应用程序可能需要使用IAudioEndpointVolume接口来控制音频端点设备的主音量级别。IAudioEndpointVolume的客户端必须注意避免更改音频端点设备的主音量级别对其他音频应用程序造成潜在的破坏性影响。通常,用户通过Windows音量控制程序Sndvol.exe对主音量级别进行独占控制


这些问题是寻找您感兴趣的API/接口的线索:另外,这里还有一个问题供您参考:

如果您减少冗余,这基本上是3行代码。或5,如果您计算使用语句。没有比这更简单的了,是吗?你用这个做了什么控制台应用?顺便说一句,此代码段使用了您通常希望避免的旧API。@TaW什么?我不知道怎么做。如果你知道,那就表演吧