2010-02-28 13 views
5

Estoy aprendiendo C# y WPF y tenía una idea para una pequeña utilidad. Quiero un gran botón rojo que solo haga una cosa: silenciar/anular por completo todos los sonidos de Windows (pitidos del sistema, WMP, reproductor de DVD, etc.) He explorado el navegador de objetos en VS 2008 pero no puedo parece encontrar lo que necesito: un silencio que afectará a todos los de Windows.Cómo silenciar Windows con WPF?

¿Es System.Windows.Input.MediaCommands.MuteVolume y no estoy obteniendo cómo usarlo?

Gracias por cualquier apuntador en la dirección correcta usando C# y/o WPF. :)

Respuesta

6

Estoy bastante seguro de que el comando es utilizado por los controles WPF individuales para silenciar. Por ejemplo, si el CommandTarget fuera un MediaElement, silenciaría su sonido cuando se ejecutara ese comando. Lamentablemente, creo que vas a tener que trabajar un poco más. Una rápida de Google dio algunos ejemplos para hacer el p/invocar manera, que es probablemente la única manera de hacerlo a partir de ahora en .NET:

Para XP: MSDN

para Vista/7: CodeProject

+0

Gracias Abe. Aprecio los punteros. – Peter

1

Puede usar NAudio (http://naudio.codeplex.com/releases/view/79035). Descargue la última versión. Extraiga las DLL y haga referencia a la DLL NAudio en su proyecto C#.

A continuación, agregue el siguiente código para recorrer todos los dispositivos de audio disponibles y silenciarlo si es posible.

 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 
     }