2010-02-28 12 views
5

Sto imparando C# e WPF e ho avuto un'idea per una piccola utilità. Voglio un grande pulsante rosso che faccia una sola cosa: disattiva/silenzia tutti i suoni di Windows (beep di sistema, WMP, lettore DVD, ecc ...) Ho esplorato il browser degli oggetti in VS 2008 ma non posso sembra di trovare quello che mi serve: un muto che interesserà tutti i Windows.Come disattivare l'audio di Windows con WPF?

E 'System.Windows.Input.MediaCommands.MuteVolume e non sto ottenendo come usarlo?

Grazie per tutti i puntatori nella giusta direzione utilizzando C# e/o WPF. :)

risposta

6

Sono abbastanza sicuro che il comando sia utilizzato dai singoli controlli WPF per il muting. Ad esempio, se il CommandTarget fosse un oggetto MediaElement, disattiverebbe il suono quando veniva eseguito quel comando. Sfortunatamente, penso che dovrai fare un po 'più di lavoro. Un google rapido ha dato alcuni esempi per fare il P/Invoke modo, che è probabilmente l'unico modo per farlo fin d'ora in .NET:

Per XP: MSDN

Per Vista/7: CodeProject

+0

Grazie Abe. Apprezzo i suggerimenti. – Peter

1

È possibile utilizzare NAudio (http://naudio.codeplex.com/releases/view/79035). Scarica l'ultima versione. Estrai le DLL e fai riferimento alla DLL NAudio nel tuo progetto C#.

Quindi aggiungere il seguente codice per scorrere tutti i dispositivi audio disponibili e, se possibile, disattivarlo.

 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 
     } 
Problemi correlati