Как отключить Windows с WPF? - PullRequest
       16

Как отключить Windows с WPF?

5 голосов
/ 28 февраля 2010

Я изучаю C # и WPF, и у меня возникла идея для небольшой утилиты. Мне нужна большая красная кнопка, которая будет выполнять только одно действие: полностью отключать / включать звук всех звуков Windows (системные звуковые сигналы, WMP, DVD-плеер и т. Д.) похоже, я нашел то, что мне нужно: отключение звука, которое повлияет на все Windows.

Это System.Windows.Input.MediaCommands.MuteVolume и я просто не понимаю, как его использовать?

Спасибо за любые указатели в правильном направлении, используя C # и / или WPF. :)

Ответы [ 2 ]

6 голосов
/ 28 февраля 2010

Я почти уверен, что команда используется отдельными элементами управления WPF для отключения звука.Например, если бы CommandTarget был MediaElement, он бы отключил звук при выполнении этой команды.К сожалению, я думаю, вам придется проделать немного больше работы.Быстрый Google дал несколько примеров для выполнения пути p / invoke, который, вероятно, является единственным способом сделать это на данный момент в .NET:

Для XP: MSDN

для Vista / 7: CodeProject

1 голос
/ 21 сентября 2012

Вы можете использовать NAudio (http://naudio.codeplex.com/releases/view/79035). Загрузите последнюю версию. Извлеките библиотеки 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
        }
...