繁体   English   中英

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

[英]How to programmatically disable the sound?

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

这是执行此操作的代码,但它是为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 的选择是一个不幸的猜测,而不是你想要 Core Audio API。

从 MSDN

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

这个问题是寻找您感兴趣的 API/接口的线索:IAudioEndpointVolume 位于 .NET 类库中的何处? 此外,这里还有另一个适合您: 静音/取消静音,使用 C# 在 Windows 7 x64 中更改主音量

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM