2010-02-28 14 views
5

Ich lerne C# und WPF und hatte eine Idee für ein kleines Dienstprogramm. Ich möchte einen großen roten Knopf, der nur eines macht: alle Windows-Sounds komplett stummschalten (System-Pieptöne, WMP, DVD-Player, etc ...) Ich habe den Objekt-Browser in VS 2008 erkundet, kann es aber nicht scheinen zu finden, was ich brauche: Eine Stummschaltung, die sich auf alle Windows auswirken wird.Wie Windows mit WPF stummschalten?

Ist es System.Windows.Input.MediaCommands.MuteVolume und ich bekomme einfach nicht, wie man es benutzt?

Danke für alle Zeiger in die richtige Richtung mit C# und/oder WPF. :)

Antwort

6

Ich bin ziemlich sicher, dass der Befehl von den einzelnen WPF-Steuerelementen für das Stummschalten verwendet wird. Wenn das CommandTarget zum Beispiel ein MediaElement wäre, würde es seinen Sound stumm schalten, wenn dieser Befehl ausgeführt wurde. Leider denke ich, dass du etwas mehr Arbeit machen musst. Eine schnelle Google gab einige Beispiele für die p tun/aufrufen Art und Weise, die wahrscheinlich der einzige Weg ist es ab sofort in .NET zu tun:

Für XP: MSDN

für Vista/7: CodeProject

+0

Dank Abe. Ich schätze die Hinweise. – Peter

1

Sie können NAudio (http://naudio.codeplex.com/releases/view/79035) verwenden. Laden Sie die neueste Version herunter. Extrahieren Sie die DLLs, und verweisen Sie in Ihrem C# -Projekt auf das DLL NAudio.

Fügen Sie dann den folgenden Code hinzu, um alle verfügbaren Audiogeräte zu durchlaufen und wenn möglich zu stummschalten.

 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 
     }