使用C#静音Windows卷

时间:2008-09-30 17:24:42

标签: c# winforms audio volume

任何人都知道如何使用C#以编程方式静音Windows XP卷?

7 个答案:

答案 0 :(得分:12)

为P / Invoke声明这个:

private const int APPCOMMAND_VOLUME_MUTE = 0x80000;
private const int WM_APPCOMMAND = 0x319;

[DllImport("user32.dll")]
public static extern IntPtr SendMessageW(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

然后使用此行将声音静音/取消静音。

SendMessageW(this.Handle, WM_APPCOMMAND, this.Handle, (IntPtr) APPCOMMAND_VOLUME_MUTE);

答案 1 :(得分:4)

您可以在Windows Vista / 7中使用什么,也可以使用8:

您可以使用NAudio 下载最新版本。解压缩DLL并在C#项目中引用DLL NAudio。

然后添加以下代码以迭代所有可用的音频设备,并在可能的情况下将其静音。

try
{
    //Instantiate an Enumerator to find audio devices
    NAudio.CoreAudioApi.MMDeviceEnumerator MMDE = new NAudio.CoreAudioApi.MMDeviceEnumerator();
    //Get all the devices, no matter what condition or status
    NAudio.CoreAudioApi.MMDeviceCollection DevCol = MMDE.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.All, NAudio.CoreAudioApi.DeviceState.All);
    //Loop through all devices
    foreach (NAudio.CoreAudioApi.MMDevice dev in DevCol)
    {
        try
        {
            //Show us the human understandable name of the device
            System.Diagnostics.Debug.Print(dev.FriendlyName);
            //Mute it
            dev.AudioEndpointVolume.Mute = true;
        }
        catch (Exception ex)
        {
            //Do something with exception when an audio endpoint could not be muted
        }
    }
}
catch (Exception ex)
{
    //When something happend that prevent us to iterate through the devices
}

答案 2 :(得分:2)

如果您正在运行Vista,我可能会感兴趣this project

答案 3 :(得分:2)

请参阅How to programmatically mute the Windows XP Volume using C#?

void SetPlayerMute(int playerMixerNo, bool value)
{
    Mixer mx = new Mixer();
    mx.MixerNo = playerMixerNo;
    DestinationLine dl = mx.GetDestination(Mixer.Playback);
    if (dl != null)
    {
        foreach (MixerControl ctrl in dl.Controls)
        {
            if (ctrl is MixerMuteControl)
            {
                ((MixerMuteControl)ctrl).Value = (value) ? 1 : 0;
                break;
            }
        }
    }
}

答案 4 :(得分:0)

您可能希望使用MCI命令: http://msdn.microsoft.com/en-us/library/ms709461(VS.85).aspx

我应该补充一点,虽然这会让你对windows中的输入和输出混音器有一个很好的控制,但你可能在进行详细控制方面遇到一些困难,比如设置麦克风增强等等。

哦,如果你在Vista上,那就忘了吧。这是一个完全不同的模型。

答案 5 :(得分:0)

您可以按照此处的说明使用P / Invoke:http://www.microsoft.com/indonesia/msdn/pinvoke.aspx。它实际上经历了任务1:靠近顶部静音和取消静音的步骤。

答案 6 :(得分:0)

这是Mike de Klerks答案的稍有改进的版本,不需要“下次出错时恢复”代码。

步骤1:将NAudio NuGet软件包添加到您的项目(https://www.nuget.org/packages/NAudio/

第2步:使用此代码:

using (var enumerator = new NAudio.CoreAudioApi.MMDeviceEnumerator())
{
    foreach (var device in enumerator.EnumerateAudioEndPoints(NAudio.CoreAudioApi.DataFlow.Render, NAudio.CoreAudioApi.DeviceState.Active))
    {
        if (device.AudioEndpointVolume?.HardwareSupport.HasFlag(NAudio.CoreAudioApi.EEndpointHardwareSupport.Mute) == true)
        {
            Console.WriteLine(device.FriendlyName);
            device.AudioEndpointVolume.Mute = false;
        }
    }
}