Отключение звука Windows с помощью C # - PullRequest
17 голосов
/ 30 сентября 2008

Кто-нибудь знает, как программно отключить звук Windows XP с помощью C #?

Ответы [ 6 ]

12 голосов
/ 30 сентября 2008

Объявите это для 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);
4 голосов
/ 21 сентября 2012

Что вы можете использовать для Windows Vista / 7 и, вероятно, 8 тоже:

Вы можете использовать NAudio .
Загрузите последнюю версию. Извлеките DLL-файлы и создайте ссылку на DLL-библиотеку NAudio в своем проекте на C #.

Затем добавьте следующий код для перебора всех доступных аудиоустройств и выключите его, если это возможно.

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 голосов
/ 02 февраля 2014

См. Как программно отключить звук тома Windows XP с помощью 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;
            }
        }
    }
}
2 голосов
/ 30 сентября 2008

Я наткнулся на этот проект , который может быть интересен, если вы работаете в Vista.

0 голосов
/ 30 сентября 2008

Вы можете использовать P / Invoke, как описано здесь: http://www.microsoft.com/indonesia/msdn/pinvoke.aspx. На самом деле он проходит через шаги в Задании 1: отключение звука и включение звука в верхней части.

0 голосов
/ 30 сентября 2008

Возможно, вы захотите использовать команды MCI: http://msdn.microsoft.com/en-us/library/ms709461(VS.85).aspx

Я должен добавить, что, хотя это даст вам хороший общий контроль над входным и выходным микшерами в окнах, у вас могут возникнуть трудности с детальными настройками, такими как настройка усиления микрофона и т. Д.

О, и если вы на Vista, просто забудьте об этом. Это совершенно другая модель.

...