Отключение / включение звука, изменение основного тома в Windows 7 x64 с помощью C #

Как настроить общую громкость в Windows 7 с помощью C #?

Я видел отличную реализацию с использованием winmm.dll здесь, но он работает с XP, а не с Windows 7.


person KalEl    schedule 06.06.2010    source источник
comment
возможный дубликат stackoverflow.com/a/3046715/285594   -  person    schedule 31.01.2017


Ответы (2)


У CodeProject есть очень хороший пример здесь. Обратите внимание, что он полностью полагается на COM-взаимодействие (проверьте COM-интерфейс, например IAudioEndpointVolume и IAudioMeterInformation в MSDN, если вас интересуют детали реализации), и работает ТОЛЬКО для Vista / Win7 и выше.

Минимальный поддерживаемый клиент: Windows Vista

Минимальный поддерживаемый сервер: Windows Server 2008

person max    schedule 06.06.2010
comment
Отлично, протестировал, работает в Windows 7 x64. Большое спасибо! - person KalEl; 18.06.2010
comment
Статья codeproject была удалена :( Кто-нибудь может вставить сюда код? - person oo_dev; 01.10.2014
comment
Этот ответ содержит некоторый код (вероятно, не из удаленной статьи codeproject, но, по крайней мере, он содержит основные COM-интерфейсы и определения): stackoverflow.com / a / 14322736/356716 - person max; 02.10.2014

Я успешно использовал пакет nuget Naudio с этим кодом:

public void SetVolume(int level)
   {
            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
                    {
                        if (dev.State == NAudio.CoreAudioApi.DeviceState.Active)
                        {
                            var newVolume = (float)Math.Max(Math.Min(level, 100),0) / (float)100;

                            //Set at maximum volume
                            dev.AudioEndpointVolume.MasterVolumeLevelScalar = newVolume;

                            dev.AudioEndpointVolume.Mute = level == 0;

                            //Get its audio volume
                            _log.Info("Volume of " + dev.FriendlyName + " is " + dev.AudioEndpointVolume.MasterVolumeLevelScalar.ToString());
                        }
                        else
                        {
                            _log.Debug("Ignoring device " + dev.FriendlyName + " with state " + dev.State);
                        }
                    }
                    catch (Exception ex)
                    {
                        //Do something with exception when an audio endpoint could not be muted
                        _log.Warn(dev.FriendlyName + " could not be muted with error " + ex);
                    }
                }
            }
            catch (Exception ex)
            {
                //When something happend that prevent us to iterate through the devices
                _log.Warn("Could not enumerate devices due to an excepion: " + ex.Message);
            }
        }
person Robert    schedule 27.04.2015